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

 #import "ViewController.h"
#define CONTACE_VIEW_HEIGHT 50
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIToolbar *toolBar;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *barButtonitemDelete; @end @implementation ViewController
- (IBAction)addContact:(UIBarButtonItem *)sender
{ //让删除按钮有效
[self.barButtonitemDelete setEnabled:YES]; //在subView中已经有了3个控件
NSInteger count = self.view.subviews.count - ;
CGRect lastFrame = self.toolBar.frame; UIView *contactView = [[UIView alloc]init];
CGFloat gapY = ;
CGFloat x = ;
CGFloat y = lastFrame.origin.y + lastFrame.size.height + (CONTACE_VIEW_HEIGHT+gapY) * count;
CGFloat w = self.view.frame.size.width; contactView.frame = CGRectMake(x,y,w,CONTACE_VIEW_HEIGHT); //添加头像
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",arc4random_uniform()]];
UIImageView *face = [[UIImageView alloc]initWithImage:image];
face.frame = CGRectMake(, ,,);
[contactView addSubview:face]; //添加姓名
UILabel *labelName = [[UILabel alloc]init];
labelName.text = [NSString stringWithFormat:@"name%d",arc4random_uniform()];
labelName.frame = CGRectMake(+image.size.width+, , , );
[contactView addSubview:labelName]; contactView.backgroundColor = [UIColor lightGrayColor]; [self.view addSubview:contactView];
}
- (IBAction)deleteContact:(UIBarButtonItem *)sender
{
//删除视图
UIView *lastView = [self.view.subviews lastObject];
[lastView removeFromSuperview]; //如果没有了contactView,设置删除按钮无效
if(self.view.subviews.count == )
{
[self.barButtonitemDelete setEnabled:NO];
}
} - (void)viewDidLoad {
[super viewDidLoad];
//开始时删除设置为无效
[self.barButtonitemDelete setEnabled:NO];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

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

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

    

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

 import "ViewController.h"
#define CONTACE_VIEW_HEIGHT 50
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIToolbar *toolBar;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *barButtonitemDelete; @end @implementation ViewController
- (IBAction)addContact:(UIBarButtonItem *)sender
{ //让删除按钮有效
[self.barButtonitemDelete setEnabled:YES]; //在subView中已经有了3个控件
NSInteger count = self.view.subviews.count - ;
CGRect lastFrame = self.toolBar.frame; //加载xib文件
NSArray *views = [[NSBundle mainBundle]loadNibNamed:@"contactView" owner:nil options:nil]; //添加contactView
UIView *contactView = [views lastObject]; CGFloat gapY = ;
CGFloat x = ;
CGFloat y = lastFrame.origin.y + lastFrame.size.height + (CONTACE_VIEW_HEIGHT+gapY) * count;
CGFloat w = self.view.frame.size.width;
contactView.frame = CGRectMake(x,y,w,CONTACE_VIEW_HEIGHT); //添加头像
UIImageView *face = (UIImageView *)[contactView viewWithTag:];
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",arc4random_uniform()]];
[face setImage:image]; //添加姓名
UILabel *labelName = (UILabel *)[contactView viewWithTag:];
labelName.text = [NSString stringWithFormat:@"name%d",arc4random_uniform()]; [self.view addSubview:contactView];
} - (IBAction)deleteContact:(UIBarButtonItem *)sender
{
//删除视图
UIView *lastView = [self.view.subviews lastObject];
[lastView removeFromSuperview]; //如果没有了contactView,设置删除按钮无效
if(self.view.subviews.count == )
{
[self.barButtonitemDelete setEnabled:NO];
}
} - (void)viewDidLoad {
[super viewDidLoad];
//开始时删除设置为无效
[self.barButtonitemDelete setEnabled:NO];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

iOS:UIToolBar控件的使用的更多相关文章

  1. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  2. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  3. IOS—UITextFiled控件详解

    IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...

  4. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  5. android 仿ios开关控件

    ios一些控件还是挺美丽的,可是对android程序猿来说可能比較苦逼,由于ios一些看起来简单的效果对android来说可能就没那么简单了,可是没办法非常多产品都是拿ios的一些控件叫android ...

  6. 79.iOS 设备的UI规范和iOS各控件默认高度

    iOS设备的UI 规范 iPhone界面尺寸 iPhone图标尺寸 iPad的设计尺寸 iPad图标尺寸 iPhone设备尺寸分辨率比例 iPhone各设备 launch image iOS 各种控件 ...

  7. iOS: 工具栏控件UIToolBar和工具栏按钮控件UIBarButtonItem的使用

    一.工具栏控件:UIToolBar:UIView 介绍: ToolBar工具栏是视图View的属性,可以在工具栏上添加工具栏按钮Bar Button Item(可以是自定义的Custom.也可以是系统 ...

  8. iOS:UIResponser控件的介绍(响应者)

    UIResponser响应者控件   知识: 在iOS中不是任何对象都能处理事件,只有继承了UIResponser的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication,UIV ...

  9. ios UI控件的简单整理

    把该文件拷贝到.m文件中就能够方便的查找 /** 匿名类目:能够声明方法和变量,属性为private(不同意在外部调用,且不能被继承 */ /** 发送数据的托付方,接收数据的时代理发(即代理的反向传 ...

随机推荐

  1. WebApi-JSON序列化循环引用

    Overview 最近被序列化,循环引用的问题,让我浑身酸爽.遇到这种异常是在搭建WebApi的时候,当我返回Linq实例类集合的时候出现的. 下定决心要解决这个问题.循环引用引起的原因是: 比如说: ...

  2. iOS WKWebview 网页开发适配指南

    iOS WKWebview 网页开发适配指南 微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配.如有问题,可参考文末联系方式,向我们 ...

  3. 机器学习之路:tensorflow 深度学习中 分类问题的损失函数 交叉熵

    经典的损失函数----交叉熵 1 交叉熵: 分类问题中使用比较广泛的一种损失函数, 它刻画两个概率分布之间的距离 给定两个概率分布p和q, 交叉熵为: H(p, q) = -∑ p(x) log q( ...

  4. new Date 兼容性问题

    IOS 11.1.2 iphoneX 下面解析 // 下面的代码会报错 var d = new Date('2018-09-20 19:20:32'); alert(d.getTime());   必 ...

  5. 【BZOJ 3456】城市规划

    http://www.lydsy.com/JudgeOnline/problem.php?id=3456 设\(f(n)\)表示n个点有标号无向连通图的数目. dp:\(f(n)=2^{n\choos ...

  6. BZOJ2673 [Wf2011]Chips Challenge 费用流 zkw费用流 网络流

    https://darkbzoj.cf/problem/2673 有一个芯片,芯片上有N*N(1≤N≤40)个插槽,可以在里面装零件. 有些插槽不能装零件,有些插槽必须装零件,剩下的插槽随意. 要求装 ...

  7. nginx与Lua执行顺序

    Nginx顺序 Nginx 处理每一个用户请求时,都是按照若干个不同阶段(phase)依次处理的,而不是根据配置文件上的顺序. Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 ...

  8. apt-get出现无法定位安装包问题解决

    这个问题出现在sources.list上 编辑/etc/apt/sources.list下的文件 找到检查你的存储库是否正确 你可以在以下页面找到不同版本 Kali Linux 的存储库:http:/ ...

  9. 王彪-20162321《程序设计与数据结构2nd》-第十一周学习总结与实验报告

    邻接矩阵实现 例图 分析 变量 需要一个链表来保存数据-即保存结点 需要一个二维数组来保存每个变得权值,有则填入具体数值,没有则用0 定义一个保存边个数的值 函数方法 得到图中边的个数 得到结点的数据 ...

  10. 【10.6校内测试】【小模拟】【hash+线段树维护覆盖序列】

    一开始看到题就果断跳到T2了!!没想到T2才是个大坑,浪费了两个小时QAQ!! 就是一道小模拟,它怎么说就怎么走就好了! 为什么要用这么多感叹号!!因为统计答案要边走边统计!!如果每个数据都扫一遍20 ...