ios UI控件--"Button"

2025-11-24 10:26:54

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;

ios UI控件--

ios UI控件--

2、二、使用Button的工厂方法创建“按钮”

 //这里创建一个蓝色小箭头按钮UIButton *button1 = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];// 工厂方法能够定义的button的6种类型:

//枚举 typedef enum {    UIButtonTypeCustom = 0,    //自定义风格  默认白色字体    UIButtonTypeSystem,   //蓝色字体

    UIButtonTypeDetailDisclosure,   //蓝色小箭头按钮,主要做详细说明用    UIButtonTypeInfoLight,  //蓝色亮色感叹号    UIButtonTypeInfoDark,   //蓝色暗色感叹号    UIButtonTypeContactAdd,   //蓝色十字加号按钮 } UIButtonType;

ios UI控件--

ios UI控件--

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

};

ios UI控件--

4、四、Button传递参数

iOS 原生的 UIButton 点击事件是不允许带多参数的,唯一的一个参数就是默认UIButton本身,那么我们该怎么实现传递多个参数的点击事件呢?

用“运行时”!!

如下图所示,导入“运行时”的头文件 #import <objc/runtime.h>

ios UI控件--

5、创建按钮,添加点击方法,把按钮加入视图中

//runtime的方法

//前3个参数以此为     对象   健   值】

//传递 “ 一” 和 “二”

    objc_setAssociatedObject(bt, "firstObject", @"一", OBJC_ASSOCIATION_RETAIN_NONATOMIC);   //实际上就是KVC

    objc_setAssociatedObject(bt, "secondObject", @"二", OBJC_ASSOCIATION_RETAIN_NONATOMIC);

代码如下图:

ios UI控件--

6、添加 点击“按钮”后的执行方法:

在方法中取到参数

//取参

 id first = objc_getAssociatedObject(sender, "firstObject");

 id second = objc_getAssociatedObject(sender, "secondObject");

如下图

ios UI控件--

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

ios UI控件--

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢