在UI控件中UIButton是极其常用的一类控件,它的类对象创建与大多数UI控件使用实例方法init创建不同,通常使用类方法创建:

+ (id)buttonWithType:(UIButtonType)buttonType;

如果使用实例方法创建UIButton对象,如:

UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 300, 100, 50)];

对象的创建是没有任何问题的,但是当为这个button对象设置一个标题时,如:

[button setTitle:@"asd" forState:UIControlStateNormal];

但程序运行之后屏幕上是没有任何显示的,但这并不是程序有bug,只是当button使用实例方法创建时,标题文字的默认颜色是白色,在白色屏幕或无设置背景色的屏幕上自然是看不见的。而如果使用类方法创建UIButton对象,则需要输入一个UIButtonType类型的参数,这是一个枚举,具体如下:

typedef NS_ENUM(NSInteger, UIButtonType) {

UIButtonTypeCustom = 0,                         // 自定义类型,即无类型,当选择这个参数市与使用类方法效果相同

UIButtonTypeSystem,                               // 标准类型,一般情况下地选择,在iOS7.0版本开始使用

UIButtonTypeDetailDisclosure,                  //与标准类型相比多了一个蓝色的information标志

UIButtonTypeInfoLight,                            //information的标志亮一点

UIButtonTypeInfoDark,                             //information的标志暗一点

UIButtonTypeContactAdd,                         //与标准类型相比多了一个加号标志

UIButtonTypeRoundedRect = UIButtonTypeSystem,   // 不赞成使用,已被标准类型代替

};

除了UIButtonTypeCustom以外其他枚举类型的默认颜色都是蓝色,几时在button上放置图片,最初的现实效果也是蓝色。

而自定义类型则可正确显示图片本来的颜色。此外,若同时为button设置图片和文字,则图片在左文字在右。

设置标题文字:- (void)setTitle:(NSString *)title forState:(UIControlState)state;

设置图片:- (void)setImage:(UIImage *)image forState:(UIControlState)state;

作用是在状态state下显示字符串对象title,图片image,其中如果要在不同状态显示不同图片则需要图片相同大小,否则会错误显示。

其中UIControlState是枚举类型,具体如下:

typedef NS_OPTIONS(NSUInteger, UIControlState) {

UIControlStateNormal       = 0,                          //正常状态

UIControlStateHighlighted  = 1 << 0,                  // 高亮状态,当button被点击时会从正常状态转变为高亮状态,松开时自动转化为正常转态

UIControlStateDisabled     = 1 << 1,                   //不可用状态,通过属性enabled设置

UIControlStateSelected     = 1 << 2,                  // 选中转态,通过属性selected设置

UIControlStateApplication  = 0x00FF0000,              // 当应用程序标志时

UIControlStateReserved     = 0xFF000000               //为内部框架预留

};

常见的用法是:

[button setTitle:title1 forState:UIControlStateNormal];

[button setTitle:title2 forState:UIControlStateHighlighted];

这样button的正常状态显示title1,按下时显示title2,松开时显示title1.

设置图片同理。

设置背景图片:- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state

与设置图片不同,背景图片显示在文字下方,而不是左边。

设置标题文字颜色:- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

此方法只改变标题文字颜色,不影响图片颜色,而属性tintColor则同时影响标题文字和图片的颜色,但不影响背景图像颜色。另外,当UIButton创建时选择UIButtonTypeCustom或使用实例方法创建时属性tintColor无效。

设置响应事件:- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

意思是当controlEvents发生时target调用action方法,用OC的说法就是发送action消息给target对象。

其中controlEvents是枚举类型,具体如下:

typedef NS_OPTIONS(NSUInteger, UIControlEvents) {

UIControlEventTouchDown           = 1 <<  0,      // 按钮按下事件

UIControlEventTouchDownRepeat     = 1 <<  1,      // 双击或多次点击事件

UIControlEventTouchDragInside     = 1 <<  2,        //控件窗口内部拖动事件

UIControlEventTouchDragOutside    = 1 <<  3,      //控件窗口外部拖动事件

UIControlEventTouchDragEnter      = 1 <<  4,       //从控件窗口外部拖动进入内部事件

UIControlEventTouchDragExit       = 1 <<  5,        //控件窗口外部拖动进入内部事件

UIControlEventTouchUpInside       = 1 <<  6,       //控件窗口内部点击抬起事件,发生在UIControlEventTouchDown事件之后

UIControlEventTouchUpOutside      = 1 <<  7,     //控件窗口内部点击窗口外部抬起事件

UIControlEventTouchCancel         = 1 <<  8,       //所有点击取消事件,如:太多手指,上锁,或有电话进入

UIControlEventValueChanged        = 1 << 12,     // 控件值改变事件,多用于UISlider,UISegmentControl,UIPageControl

UIControlEventEditingDidBegin     = 1 << 16,     // UITextField开始编辑事件,即进入第一响应时

UIControlEventEditingChanged      = 1 << 17,    //UITextField中的文字改变时

UIControlEventEditingDidEnd       = 1 << 18,     //UITextField结束编辑时,即取消第一响应时

UIControlEventEditingDidEndOnExit = 1 << 19,     // 点击'return key'时,默认是换行键,会自动取消第一响应结束编辑

UIControlEventAllTouchEvents      = 0x00000FFF,  // 所有触摸事件

UIControlEventAllEditingEvents    = 0x000F0000,  // 所有 UITextField编辑事件

UIControlEventApplicationReserved = 0x0F000000,  // range available for application use

UIControlEventSystemReserved      = 0xF0000000,  // range reserved for internal framework use

UIControlEventAllEvents           = 0xFFFFFFFF        //所有事件

};

取消响应事件:- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

作用是取消当controlEvents发生时target对action的响应,即当事件发生时target不再触发方法action,当然前提是之前已经添加了对这个事件的方法响应,其中参数均可设置为nil,表示任意、所有,即移除全部。

iOS中UIButton控件的用法及部分参数解释的更多相关文章

  1. MFC中按钮控件的用法笔记(转)

    VC学习笔记1:按钮的使能与禁止 用ClassWizard的Member Variables为按钮定义变量,如:m_Button1:则m_Button1.EnableWindow(true); 使按钮 ...

  2. 如何自定义iOS中的控件

    本文译自 How to build a custom control in iOS .大家要是有什么问题,可以直接在 twitter 上联系原作者,当然也可以在最后的评论中回复我. 在开发过程中,有时 ...

  3. Delphi中TxmlDocument控件的用法 转

    Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xm ...

  4. iOS 中UI控件的各种对齐方式总结

    1.textAligment : 文字的水平方向的对齐方式 取值 NSTextAlignmentLeft      = 0,    // 左对齐 NSTextAlignmentCenter    = ...

  5. winform 窗体中 Time 控件的用法

    作用: 用于背景进程中.通过引发Timer事件,Timer控件可以有规律的隔一段时间执行一次代码.也就是,你可以根据你自己的需要,给Timer控件设置时间,Timer每隔这段时间,就执行一次代码. 属 ...

  6. C# WinForm中NotifyICon控件的用法

    参考:http://blog.csdn.net/paullink520/article/details/14170021 http://www.cnblogs.com/webman/archive/2 ...

  7. ios 中基本控件的定义

    我的开发笔记--UILabel的详细使用及特殊效果 我的开发笔记--UIButton的详细使用 我的开发笔记---UISegmentedControl的详细使用 我的开发笔记---UITextFiel ...

  8. xAML中一些控件的用法学习

    首先,介绍一些比较简单的设计,这些可以直接通过拖拽实现.如下例子: <Window x:Class="wpf1.MainWindow" xmlns="http:// ...

  9. C#中axWindowsMediaPlayer控件的用法

    属性/方法名: 说明:[基本属性] URL:String; 指定媒体位置,本机或网络地址uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisibleplay ...

随机推荐

  1. Linux phpmailer发送邮件失败的解决方法

    (本地windows phpmailer发送ok 放到linux发送失败) 原因:linux  通过465端口进行更安全的SMTPS协议发送邮件 windows 是基于smtp  25端口的 因此 可 ...

  2. 月薪30-50K的大数据工程师们,他们背后是如何学习的

    ​ 这两天小编去了解了下大数据开发相关职位的薪资,主要有hadoop工程师,数据挖掘工程师.大数据算法工程师等,从平均薪资来看,目前大数据相关岗位的月薪均在2万以上,随着项目经验的增长工资会越来越高. ...

  3. spark源码编译记录

    spark在项目中已经用了一段时间了,趁现在空闲,下个源码编译在IDEA里面阅读下,特此记录过程. 前提已经安装maven和git 1.上官网下载源码的包: 2.然后解压到一个文件夹 3.编译,编译的 ...

  4. 『Python基础-5』数字,运算,转换

    『Python基础-5』数字,运算,转换 目录 基本的数字类型 二进制,八进制,十六进制 数字类型间的转换 数字运算 1. 数字类型 Python 数字数据类型用于存储数学上的值,比如整数.浮点数.复 ...

  5. cocos2d中锚点概念

    这两天看了下锚点的概念. /** * Sets the anchor point in percent. * * anchorPoint is the point around which all t ...

  6. 关于 logger

    日志 前言 我是一名后台程序员,接触后台只有一年时间,在这期间一共做过四个项目,分别是: 工作室招新系统 视频学习网站 创客网站 打印机项目 由于之前做项目的时候没有好好重视日志,所以导致在开发与维护 ...

  7. 【CF613D】Kingdom and its Cities(虚树,动态规划)

    [CF613D]Kingdom and its Cities(虚树,动态规划) 题面 洛谷 CF 翻译洛谷上有啦 题解 每次构建虚树,首先特判无解,也就是关键点中存在父子关系. 考虑\(dp\),设\ ...

  8. CakePHP 查询总结

    返回 $this->Post->buildQuery(); 返回: Array ( [conditions] => [fields] => [joins] => Arra ...

  9. 如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染

    7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. Unity大中华区技术经理 ...

  10. Selenium安装(二)

    安装python 安装Selenium之前首先来说一下Python,python是一门动态性语言,python的编写比较灵活,简洁,开发效率高.因此以python结合selenium来进行自动化测试. ...