ios UI控件--"Button"
1、一、Button的---"状态"
//这是一个“枚举”
typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal = 0, //正常状态(没有做任何操作时)
UIControlStateHighlighted = 1 << 0, //点击时
UIControlStateDisabled = 1 << 1, //禁用时 (不能接受点击事件)
UIControlStateSelected = 1 << 2, //点击选中后
UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3,
UIControlStateApplication = 0x00FF0000, //当应用程序标志时
UIControlStateReserved = 0xFF000000 //内部框架预留
};
我们最常用的是上面的4个
1.UIControlStateNormal
1> 除开UIControlStateHighlighted、UIControlStateDisabled、UIControlStateSelected以外的其他情况,都是normal状态
2> 这种状态下的按钮【可以】接收点击事件
2.UIControlStateHighlighted
1> 【当按住按钮不松开】或者【highlighted = YES】时就能达到这种状态
2> 这种状态下的按钮【可以】接收点击事件
3.UIControlStateDisabled
1> 【button.enabled = NO】时就能达到这种状态
2> 这种状态下的按钮【无法】接收点击事件
4.UIControlStateSelected
1> 【button.selected = YES】时就能达到这种状态
2> 这种状态下的按钮【可以】接收点击事件
让按钮无法点击的2种方法
1> button.enabled = NO;
*【会】进入UIControlStateDisabled状态
2> button.userInteractionEnabled = NO;
*【不会】进入UIControlStateDisabled状态,继续保持当前状态
1.在默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为no,可以去掉这个功button1.adjustsImageWhenHighlighted = NO;
2.跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置button1.adjustsImageWhenDisabled = NO;
3.下面的这个属性设置为yes的状态下,"按钮"按下会有一个光斑*/button1.showsTouchWhenHighlighted = YES;


2、二、使用Button的工厂方法创建“按钮”
//这里创建一个蓝色小箭头按钮UIButton *button1 = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];// 工厂方法能够定义的button的6种类型:
//枚举 typedef enum { UIButtonTypeCustom = 0, //自定义风格 默认白色字体 UIButtonTypeSystem, //蓝色字体
UIButtonTypeDetailDisclosure, //蓝色小箭头按钮,主要做详细说明用 UIButtonTypeInfoLight, //蓝色亮色感叹号 UIButtonTypeInfoDark, //蓝色暗色感叹号 UIButtonTypeContactAdd, //蓝色十字加号按钮 } UIButtonType;


3、三、按钮的点击事件
//添加点击方
[button1 addTarget:self action:@selector(clcik:) forControlEvents:UIControlEventTouchUpInside];
//下面就是控件的所有“事件”
typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
//单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候
UIControlEventTouchDown = 1 << 0,
// 多点触摸按下事件,点触计数大于1:用户按下第二、三根手指的时候
UIControlEventTouchDownRepeat = 1 << 1,
//当一次触摸在控件窗口内拖动时
UIControlEventTouchDragInside = 1 << 2,
//当一次触摸在控件窗口之外拖动时
UIControlEventTouchDragOutside = 1 << 3,
//当一次触摸从控件窗口之外拖动到内部时
UIControlEventTouchDragEnter = 1 << 4,
//当一次触摸从控件窗口内部拖动到外部时
UIControlEventTouchDragExit = 1 << 5,
//所有在控件之内触摸抬起事件 【==最常用==】
UIControlEventTouchUpInside = 1 << 6,
//所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)
UIControlEventTouchUpOutside = 1 << 7,
//所有触摸取消事件
UIControlEventTouchCancel = 1 << 8,
//当控件的值发生改变时 【==最常用==】
UIControlEventValueChanged = 1 << 12,
UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13,
//当文本控件中开始编辑时发送通知
UIControlEventEditingDidBegin = 1 << 16,
// 当文本控件中的文本被改变时发送通知
UIControlEventEditingChanged = 1 << 17,
//当文本控件中编辑结束时发送通知
UIControlEventEditingDidEnd = 1 << 18,
//当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知
UIControlEventEditingDidEndOnExit = 1 << 19,
//通知所有触摸事件
UIControlEventAllTouchEvents = 0x00000FFF,
//通知所有关于文本编辑的事件
UIControlEventAllEditingEvents = 0x000F0000,
UIControlEventApplicationReserved = 0x0F000000,
UIControlEventSystemReserved = 0xF0000000,
//通知所有事件
UIControlEventAllEvents = 0xFFFFFFFF
};

4、四、Button传递参数
iOS 原生的 UIButton 点击事件是不允许带多参数的,唯一的一个参数就是默认UIButton本身,那么我们该怎么实现传递多个参数的点击事件呢?
用“运行时”!!
如下图所示,导入“运行时”的头文件 #import <objc/runtime.h>

5、创建按钮,添加点击方法,把按钮加入视图中
//runtime的方法
//前3个参数以此为 对象 健 值】
//传递 “ 一” 和 “二”
objc_setAssociatedObject(bt, "firstObject", @"一", OBJC_ASSOCIATION_RETAIN_NONATOMIC); //实际上就是KVC
objc_setAssociatedObject(bt, "secondObject", @"二", OBJC_ASSOCIATION_RETAIN_NONATOMIC);
代码如下图:

6、添加 点击“按钮”后的执行方法:
在方法中取到参数
//取参
id first = objc_getAssociatedObject(sender, "firstObject");
id second = objc_getAssociatedObject(sender, "secondObject");
如下图

7、点击按钮后 打印出参数,表明Button传值成
