在介绍UIButton的用法前,要先了解一下它的父类UIControl,UIControl是所有具有事件处理功能控件的父类。

而该类控件一般响应事件又有三种形式:基于触摸、基础值、基础编辑。控件的层次关系图如下:

UIControl类的常用方法:

    - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; //添加一个事件

    - (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; //删除一个事件

它的子类因为继承了这些方法,所以也经常用到,比如UIButton。

以上两个方法的中最后一个参数,UIControlEvents为点击事件,是枚举类型。

    UIControlEventTouchDown                 // 用户按下时触发
UIControlEventTouchDownRepeat // 点击次数大于1时触发
UIControlEventTouchDragInside // 当触摸在控件内拖动时触发
UIControlEventTouchDragOutside // 当触摸在控件之外拖动时触发
UIControlEventTouchDragEnter // 当触摸从控件外拖动到内部时
UIControlEventTouchDragExit // 当触摸从控件内拖动到外部时
UIControlEventTouchUpInside // 在控件内触摸抬起时
UIControlEventTouchUpOutside // 在控件外触摸抬起时
UIControlEventTouchCancel // 触摸取消事件,设备被锁上或者电话呼叫打断 UIControlEventValueChanged // 当控件的值发生改变时 UIControlEventEditingDidBegin //文本控件开始编辑时
UIControlEventEditingChanged //文本控件的文本改变
UIControlEventEditingDidEnd //文本控件结束编辑时
UIControlEventEditingDidEndOnExit // 文本控件内通过按下回车键结束编辑时 UIControlEventAllTouchEvents // 所有触摸事件
UIControlEventAllEditingEvents // 文本编辑的所有事件,for UITextField
UIControlEventApplicationReserved // range available for application use
UIControlEventSystemReserved // range reserved for internal framework use
UIControlEventAllEvents //所有事件

UIButton

常用方法如下:

- (void)setTitle:(NSString *)title forState:(UIControlState)state;                     // default is nil. title is assumed to be single line
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state; // default if nil. use opaque white
- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state; // default is nil. use 50% black
- (void)setImage:(UIImage *)image forState:(UIControlState)state; // default is nil. should be same size if different for different states
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state; // default is nil
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; //添加一个事件

UIControlState也是个枚举类型:

    UIControlStateNormal       //正常状态
UIControlStateHighlighted // 高亮状态
UIControlStateDisabled //禁用状态
UIControlStateSelected // 选中状态
UIControlStateApplication // additional flags available for application use
UIControlStateReserved

注意:上面的方法中,setTitle和setImage方法不能同时使用,同时使用,只会显示图片,不显示标题。

如果要设置图片和标题,应该setBackgroundImage和setTitle或者自定义一个UIButton的子类来实现。

UIButton各属性设置的实例代码:

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
// 设置frame,与按钮的类型有关
button.frame = CGRectMake(90, 100, 41, 30);
// 禁用按钮
button.enabled = NO;
// 按钮选中
button.selected = YES;
// 设置标题,状态正常
[button setTitle:@"normal" forState:UIControlStateNormal];
// 设置标题,状态高亮
[button setTitle:@"highlighted" forState:UIControlStateHighlighted];
// 设置标题,状态禁用
[button setTitle:@"disabled" forState:UIControlStateDisabled];
// 设置标题,状态选中
[button setTitle:@"selected" forState:UIControlStateSelected];
// 设置title的颜色
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
//设置标题的字体
button.titleLabel.font = [UIFont systemFontOfSize:14.0f]; // 设置背景图片
[button setBackgroundImage:[UIImage imageNamed:@"love_normal"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"love_select"] forState:UIControlStateHighlighted];
[button setBackgroundImage:[UIImage imageNamed:@"love_select"] forState:UIControlStateSelected]; // 设置图片
[button setImage:[UIImage imageNamed:@"love_normal"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"love_select"] forState:UIControlStateSelected]; // 用户在控件内按下抬起时
[button addTarget:self action:@selector(touchUpInside:) forControlEvents:UIControlEventTouchUpInside];
// 用户按下时
[button addTarget:self action:@selector(down) forControlEvents:UIControlEventTouchDown];
// 用户按下时
[button addTarget:self action:@selector(outside) forControlEvents:UIControlEventTouchUpOutside];
// 记录用户多次按下
[button addTarget:self action:@selector(repeat) forControlEvents:UIControlEventTouchDownRepeat];
// 用户由内向外
[button addTarget:self action:@selector(dragExit) forControlEvents:UIControlEventTouchDragExit];
// 用户由外向内
[button addTarget:self action:@selector(dragEnter) forControlEvents:UIControlEventTouchDragEnter];
// 事件的取消
[button addTarget:self action:@selector(cancel) forControlEvents:UIControlEventTouchCancel];

注意了,如果想要UIButton的背景图片显示一张网络图片的话,可以用SDWebImage这个开源框架。

iOS开发之四:常用控件--UIButton的使用的更多相关文章

  1. IOS开发中设置控件内容对齐方式时容易混淆的几个属性

    IOS开发中四个容易混淆的属性: 1. textAligment : 文字的水平方向的对齐方式 1> 取值 NSTextAlignmentLeft      = 0,    // 左对齐 NST ...

  2. ios开发中button控件的属性及常见问题

    最为最基本的控件,我们必须对button的每个常用属性都熟练应用: 1,使用之前,必须对按钮进行定义,为乐规范,在@interface ViewController (){}中进行定义,先定义后使用. ...

  3. iOS 开发 ZFUI framework控件,使布局更简单

    来自:http://www.jianshu.com/p/bcf86b170d9c 前言 为什么会写这个?因为在iOS开发中,界面的布局一直没有Android布局有那么多的方法和优势,我个人开发都是纯代 ...

  4. IOS开发自定义CheckBox控件

    IOS本身没有系统的CheckBox组件,但是实际开发中会经常用到,所以专门写了一个CheckBox控件,直接上代码 效果图: UICheckBoxButton.h文件如下: #import #imp ...

  5. iOS开发基础-UITableView控件简单介绍

     UITableView 继承自 UIScrollView ,用于实现表格数据展示,支持垂直滚动.  UITableView 需要一个数据源来显示数据,并向数据源查询一共有多少行数据以及每一行显示什么 ...

  6. iOS开发中UIDatePicker控件的使用方法简介

    iOS上的选择时间日期的控件是这样的,左边是时间和日期混合,右边是单纯的日期模式. 您可以选择自己需要的模式,Time, Date,Date and Time  , Count Down Timer四 ...

  7. iOS开发无第三方控件的援助达到的效果侧边栏

    最近的研究iOS程序侧边栏.渐渐的发现iOS该方案还开始采取风侧边栏格该,QQ,今日头条,Path(Path运营商最早的侧边栏app该,效果说成是Path效果),所以就研究了下. 然后发现Git Hu ...

  8. 【Qt开发】常用控件--QSpinBox和QDoubleSpinBox

    QSpinBox和QDoubleSpinBox 是UI设计常用的控件. QSpinBox可用于显示和输入整数,并可以在显示框中添加前缀或后缀. QDoubleSpinBox可用于显示和输入小数,并可以 ...

  9. 【Qt开发】常用控件--QLineEdit

    QLineEdit是单行文本编辑控件.比如用户名,密码等输入框可以使用该控件. 所属头文件<QLineEdit> 常用方法 1.void setText(const QString &am ...

随机推荐

  1. box-sizing position

    box-sizing 属性 用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型.可以使用此属性来模拟不正确支持CSS盒子模型规范的浏览器的行为. /* 关键字 值 */ box-sizing: ...

  2. Linux学习之CentOS(十八)-----恢复Ext3下被删除的文件与 使用grep恢复被删文件内容(转)

    前言 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件. 删除文件 假设我们有一个文件名叫 'test.txt' $ls -il test.txt 15 -rw-rw-r– 2 roo ...

  3. Mysql锁机制--并发事务带来的更新丢失问题

    Mysql 系列文章主页 =============== 刚开始学习 Mysql 锁的时候,觉得 Mysql 使用的是行锁,再加上其默认的可重复读的隔离级别,那就应该能够自动解决并发事务更新的问题.可 ...

  4. Jenkins 2.x版本修改启动端口号

    直接修改jenkins.xml中arguments的httpPort 然后,重启jenkins.

  5. python学习之路前端-jQuery

    jQuery简介      JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF1.5+, Safa ...

  6. Python中什么是变量Python中定义字符串

    在Python中,变量的概念基本上和初中代数的方程变量是一致的. 例如,对于方程式 y=x*x ,x就是变量.当x=2时,计算结果是,当x=5时,计算结果是25. 只是在计算机程序中,变量不仅可以是数 ...

  7. Java不走弯路教程(2.Hello,Java!)

    2.Hello,Java! 欢迎来到Java的世界,在上一章,我们已经完成了DOS的基本操作学习和Java的环境搭建,在本章中我们Java来完成一个简单的DOS程序. 2.1 Hello,Java! ...

  8. webpack4新建一个项目

    Create a new directory mkdir webpack-4-quickstart Initialize a package.json by running: npm init -y ...

  9. jQuery 遍历 – 祖先

    祖先是父.祖父或曾祖父等等. 通过 jQuery,您能够向上遍历 DOM 树,以查找元素的祖先. 向上遍历 DOM 树 这些 jQuery 方法很有用,它们用于向上遍历 DOM 树: parent() ...

  10. PHP 文件

    PHP 文件处理 fopen() 函数用于在 PHP 中打开文件. 打开文件 fopen() 函数用于在 PHP 中打开文件. 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来 ...