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. Oracle截取字符串和查找字符串

    oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr 1.SUBSTR(string,s ...

  2. CentOS 5.x上配置JBoss6.x步骤图解教程

    1.如何远程连接CentOS和文件上传下载 使用工具Xmanager下的Xbroswer 首先在Xbroswer下的Xshell下新建文件夹JavaPlatServer,新建一个Xshell Sess ...

  3. 查看锁信息(开启InnoDB监控)

    当前mysql版本:5.6.21 一.背景 在mysql处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信 ...

  4. [ZHOJ1956]vfk的地雷

    题目大意: 有$n$个开关,$r$句话. 每个开关$i$有$p_i$的概率被触发,并造成$d_i$的代价. 每个开关至多被触发一次,一句话至多触发一个开关. 每个开关按照顺序被尝试触发. 求期望代价. ...

  5. SQL Server 无日志文件附加数据库

    CREATE DATABASE DBname ON (FILENAME = 'D:\SalesData\DBname_data.mdf') FOR ATTACH_REBUILD_LOG ; GO 简单 ...

  6. python循环与判断

    学习一门新的语言最重要的就是练习. 一.脚本需求: 编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 二.脚本流程图: 写代码之前画个流程图总是好的,可以让你理清思路,避免写着写着 ...

  7. php模块组成

    php总共有三个模块:内核.ZEND引擎.扩展. 内核是用来处理请求.文件流.错误处理等操作的: ZEND引擎是将源文件转换成机器语言,然后在虚拟机上运行: 扩展层是一组函数.类库和流,php使用它们 ...

  8. Spring @Value 用法小结,#与$的区别

    20161016更新:这货其实是SpEL的功能,来这里看看吧: Spring 4 官方文档学习(五)核心技术之SpEL 起因 一直的用法是 @Value("${jdbc.driverClas ...

  9. Python threads synchronization: Locks, RLocks, Semaphores, Conditions, Events and Queues(Forwarding)

    This article describes the Python threading synchronization mechanisms in details. We are going to s ...

  10. 给Android组件添加事件一个很好用的方法

    在这里想和大家分享一下很好用的添加事件方法,特别是在处理ListView里的Item事件的时候,很方便. 首先,在XML里布局的时候,添加这样一个属性: android:onClick="C ...