• iOS:UIToolBar控件的使用


    UIToolBar控件:是经常使用的一个工具条控件,虽然在上面可以添加子控件,但是toolbar中只能添加UIBarButtonItem类型的子控件,其他子控件会被包装成这种类型的,例如UIButton。通过工具栏可以用来对视图View中内容进行操作。

    原理:

    可以在toolBar上添加任何子控件。其实它的原理是把你要添加的子控件先加到toolbarItems数组里面,最后再把toolbarItems数组一次性放到toolbar工具栏里面。

    虽然可以在toolbar中添加其他任何的视图控件如UILabel、UITextField、UIImageView等等,但是在xib/storyboard图形界面设计时,不能它们直接放置到UIToolBar中。若强行将它们拖曳到UIToolBar,会使它们放置在上层容器中,而不是UIToolBar中。所以前提是先必须添加一个视图UIView控件到toolbar中,它会被包装成UIBarButtonItem类型,然后再在UIView中添加需要的子视图控件。

    举例如下:将UILabel加入到toolbar工具栏中,步骤如下:

    1. 将UIView拖曳到UIToolBar(UIToolBar中自动增加了一个UIBarButtonItem,其中便是刚才插入的UIView);

    2. 将UILabel(或其他控件)拖曳到刚才的UIView中;

    3. 将刚才的UIView的Background设为某种颜色(如蓝色);

    4. 将刚才的UIView的Background设为Default。

    对toolbar进行初始化:

    -initWithTitle(添加button用这个)

    -initWithImage

    -initWithBarButtonSystemItem(添加系统自定义的button,形状跟大小都已经固定了)下面链接里面有按钮图片样式

    -initWithCustomView(添加除了button以外的View)

    一、采用系统默认.xib文件中的UIToolBar,制作的工具栏(删除和添加图片)

      (1)默认的View视图布局

         

      代码如下:需要在代码中为添加的控件人为设置frame具体坐标x,y、大小width,height

    复制代码
     1 #import "ViewController.h"
     2 #define CONTACE_VIEW_HEIGHT 50
     3 @interface ViewController ()
     4 @property (weak, nonatomic) IBOutlet UIToolbar *toolBar;
     5 @property (weak, nonatomic) IBOutlet UIBarButtonItem *barButtonitemDelete;
     6 
     7 @end
     8 
     9 @implementation ViewController
    10 - (IBAction)addContact:(UIBarButtonItem *)sender
    11 {
    12     
    13     //让删除按钮有效
    14     [self.barButtonitemDelete setEnabled:YES];
    15     
    16     //在subView中已经有了3个控件
    17     NSInteger count = self.view.subviews.count - 3;
    18     CGRect lastFrame = self.toolBar.frame;
    19     
    20     UIView *contactView = [[UIView alloc]init];
    21     CGFloat gapY = 5;
    22     CGFloat x = 0;
    23     CGFloat y = lastFrame.origin.y + lastFrame.size.height + (CONTACE_VIEW_HEIGHT+gapY) * count;
    24     CGFloat w = self.view.frame.size.width;
    25     
    26     contactView.frame = CGRectMake(x,y,w,CONTACE_VIEW_HEIGHT);
    27     
    28     
    29     //添加头像
    30     UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",arc4random_uniform(9)]];
    31     UIImageView *face = [[UIImageView alloc]initWithImage:image];
    32     face.frame = CGRectMake(10, 0,50,50);
    33     [contactView addSubview:face];
    34     
    35     //添加姓名
    36     UILabel *labelName = [[UILabel alloc]init];
    37     labelName.text = [NSString stringWithFormat:@"name%d",arc4random_uniform(10)];
    38     labelName.frame = CGRectMake(10+image.size.width+50, 0, 100, 50);
    39     [contactView addSubview:labelName];
    40     
    41     
    42     contactView.backgroundColor = [UIColor lightGrayColor];
    43     
    44     [self.view addSubview:contactView];
    45 }
    46 - (IBAction)deleteContact:(UIBarButtonItem *)sender
    47 {
    48     //删除视图
    49     UIView *lastView = [self.view.subviews lastObject];
    50     [lastView removeFromSuperview];
    51     
    52     //如果没有了contactView,设置删除按钮无效
    53     if(self.view.subviews.count == 3)
    54     {
    55         [self.barButtonitemDelete setEnabled:NO];
    56     }
    57 }
    58 
    59 - (void)viewDidLoad {
    60     [super viewDidLoad];
    61     //开始时删除设置为无效
    62     [self.barButtonitemDelete setEnabled:NO];
    63 }
    64 
    65 - (void)didReceiveMemoryWarning {
    66     [super didReceiveMemoryWarning];
    67     // Dispose of any resources that can be recreated.
    68 }
    复制代码

      二、采用提前自定义布局的.xib文件中的UIToolBar,制作的工具栏(删除和添加图片)

    (2)自定义的View视图布局,添加UIImage、UILabel控件

        

        代码如下:不需要在代码中再去设置添加控件的frame,在.xib文件中已经布局好了。

    复制代码
     1 import "ViewController.h"
     2 #define CONTACE_VIEW_HEIGHT 50
     3 @interface ViewController ()
     4 @property (weak, nonatomic) IBOutlet UIToolbar *toolBar;
     5 @property (weak, nonatomic) IBOutlet UIBarButtonItem *barButtonitemDelete;
     6 
     7 @end
     8 
     9 @implementation ViewController
    10 - (IBAction)addContact:(UIBarButtonItem *)sender
    11 {
    12     
    13     //让删除按钮有效
    14     [self.barButtonitemDelete setEnabled:YES];
    15     
    16     //在subView中已经有了3个控件
    17     NSInteger count = self.view.subviews.count - 3;
    18     CGRect lastFrame = self.toolBar.frame;
    19     
    20     //加载xib文件
    21     NSArray *views = [[NSBundle mainBundle]loadNibNamed:@"contactView" owner:nil options:nil];
    22     
    23     //添加contactView
    24     UIView *contactView = [views lastObject];
    25 
    26     
    27     CGFloat gapY = 5;
    28     CGFloat x = 0;
    29     CGFloat y = lastFrame.origin.y + lastFrame.size.height + (CONTACE_VIEW_HEIGHT+gapY) * count;
    30     CGFloat w = self.view.frame.size.width;
    31     contactView.frame = CGRectMake(x,y,w,CONTACE_VIEW_HEIGHT);
    32     
    33     
    34     //添加头像
    35     UIImageView *face = (UIImageView *)[contactView viewWithTag:1];
    36     UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",arc4random_uniform(9)]];
    37     [face setImage:image];
    38 
    39 
    40     
    41     //添加姓名
    42     UILabel *labelName = (UILabel *)[contactView viewWithTag:2];
    43     labelName.text = [NSString stringWithFormat:@"name%d",arc4random_uniform(10)];
    44     
    45     [self.view addSubview:contactView];
    46 }
    47 
    48 - (IBAction)deleteContact:(UIBarButtonItem *)sender
    49 {
    50     //删除视图
    51     UIView *lastView = [self.view.subviews lastObject];
    52     [lastView removeFromSuperview];
    53     
    54     //如果没有了contactView,设置删除按钮无效
    55     if(self.view.subviews.count == 3)
    56     {
    57         [self.barButtonitemDelete setEnabled:NO];
    58     }
    59 }
    60 
    61 - (void)viewDidLoad {
    62     [super viewDidLoad];
    63     //开始时删除设置为无效
    64     [self.barButtonitemDelete setEnabled:NO];
    65 }
    66 
    67 - (void)didReceiveMemoryWarning {
    68     [super didReceiveMemoryWarning];
    69     // Dispose of any resources that can be recreated.
    70 }
    71 
    72 @end
  • 相关阅读:
    Maven工程运行环境修改
    Maven中出现org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException错误
    IDEA创建maven_web工程后,右键包没有Servlet、Filter、Listener选项
    Spring中的依赖注入
    什么是JavaBean
    mybatis配置SqlMapConfig.xm时没有提示
    JDK1.8之后匿名内部类访问方法中的局部变量不用加final修饰
    架构、框架和设计模式
    CitrixSQL Server 2016高可用之SQL镜像 SQL Server mirror 带见证服务器
    CitrixPVS BDM启动模式创建虚机 BDM模式部署桌面(精华)
  • 原文地址:https://www.cnblogs.com/daxiong520/p/4915964.html
Copyright © 2020-2023  润新知