在介绍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. 《Java技术》的第二次作业

    (一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? (1) 构造方法用于在创建对象时对其进行初始化,且方法名与类名相同,方法名前面没有返回值类型的声明,不能 ...

  2. Python学习札记-eval函数

    eval()函数 eval()官方文档里面给出来的功能解释是:将字符串string对象转化为有效的表达式参与求值运算返回计算结果 语法上:调用的是:eval(expression,globals=No ...

  3. Servlet生命周期与工作原理(转载)

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  4. Create database 创建数据库

    首先在ORACLE用户下进入.bash_profile文件 [oracle@linux02 ~]$ vi .bash_profile export ORACLE_SID=hldbexport ORAC ...

  5. 初步配置阿里云ECS服务器

    阿里云服务器配置记录01 购买阿里云学生服务器9.9元每月 创建ubuntu64位实例系统,注意必须添加安全组设置才可远程登入(设置课访问端口及IP范围 putty 软件在windows10下远程登入 ...

  6. Rx系列二 | Observer | Observable

    Rx系列二 | Observer | Observable 上节课我们对RX的一些基本概念和使用JAVA代码实现了一个观察者,但是这只是对思路的一个讲解,在我们JAVA中,其实是已经封装好了观察者对象 ...

  7. 自定义一个仿Spinner

    两个布局文件: adpter_list.xml <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  8. 激活第一个CPU

    回到start_kernel,559行,boot_cpu_init函数,跟start_kernel位于同一文件: 494static void __init boot_cpu_init(void) 4 ...

  9. rbac 概念

    1 权限管理 1.1 什么是权限管理 分享牛原创,分享牛系列.基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户 ...

  10. python 列表解析与map和filter函数

    不知哪儿看到一个说法,大概是当map的函数参数可以直接引用一个已有的函数变量时(比如内建函数int,str之类的),用map更优美些,否则还是用列表解析更直观和快速. 我同意此说法. 昨天在写一个函数 ...