【IOS 开发学习总结-OC-40】★★ios开发之事件机制——控件获取方式与事件处理方式

来源:互联网 发布:c 二维数组输出 编辑:程序博客网 时间:2024/06/04 19:06

使用 IOS 的事件机制,可以实现与用户的交互。

ios程序获取控件的2种方式:

  1. 通过 IBOutlet 连接来获取控件 ;
  2. 通过为控件指定Tag 属性来获取控件。

通过 IBOutlet 连接来获取控件

IBOutlet是 什么呢 ?它是个特殊的属性,可建立与界面设计文件中控件的关联。
简单示意图:
这里写图片描述
看图示到第4步时,需要选中控件然后按住 control+鼠标左键,从可视化界面拖动到右侧 的相应头文件中,松手后就能看到示意图效果。然后就是设置选项了。下面仔细说道一下:


  1. ⭐️connection 列表:选择该 UI 控件创建 IBOutlet 属性还是IBOutlet集合。——大部分时候是创建IBOutlet 属性;创建IBOutlet集合允许开发者将多个相同类型的对象与一个 NSArray 属性建立关联,而不是为每个 UI 控件创建单独的IBOutlet 属性。
  2. Name: 设置属性名;
  3. Type: xcode 会自动检测,有时也需要我们手动选择设置。
  4. ⭐️ storage列表框:设置存储机制:strong 或 weak。
    关于 strong 和 weak 之前也简单介绍过。这里有 2篇不错的讲解文章作为知识补充,供我们一起学习:
    ①: ARC指南1 - strong和weak指针
    ②: iOS ARC 完全指南(资料下载)

知识扩展:为 UI 控件创建 IBOutlet 属性,其实就是在控制器接口部分使用 @property 定义一个属性——并不需在控制器实现部分使用@synthesize 为该属性 合成 setter,getter 方法。如果程序需要改变该属性 对应的实例变量,依然可以借助@synthesize进行定义。

通过Tag 属性来获取控件

示例代码段:

// 重写该方法,当该控制器关联的视图加载完成后系统会调用该方法- (void)viewDidLoad{    [super viewDidLoad];    NSLog(@"nib文件加载完成!!");    // 如果程序需要再nib视图文件加载完成执行某些额外的处理,可在此处编写代码。    // 借助于viewWithTag:方法即可通过UI控件的Tag属性来获取该控件,    UILabel* myLb = (UILabel*)[self.view viewWithTag:12];    // 设置myLb的文本内容    [myLb setText:@"欢迎学习iOS开发!"];    // 直接通过IBOutlet属性来访问第一个UILable控件    [self.myTxt setText:@"iOS真有趣!"];    // 为loginBn控件的UIControlEventTouchUpInside事件绑定事件处理方法    // 以当前对象的loginHandler:方法作为事件处理方法    [self.loginBn addTarget:self action:@selector(loginHandler:)        forControlEvents:UIControlEventTouchUpInside];}

事件处理方式

IOS 中常见的事件处理方式有3种:

  1. 通过 IBAction 绑定将控件的特定事件绑定到控制器的指定方式,——该控件上事件发生时,将会触发控制器对应的方法;
  2. 程序中为 UI 控件的特定事件绑定事件监听器;
  3. 直接委托给对应的委托对象处理——对于 UI 控件的某些生命周期事件;

事件处理方式之IBAction 绑定

IBAction方法是可被作为界面设计文件中 UI控件的事件处理方法的一种特殊的方法。
这里以 UIButton 控件为例(各参数介绍讲解):
这里写图片描述
示例代码段:

- (IBAction)clickHandler:(UIButton *)sender {    [self.myTxt setText:@"IBAction事件机制"];}

通过代码设置事件处理方法

iOS应用中能与用户进行交互的控件大都继承了 UIControl 基类,该类提供的如下的注册,删除事件处理方法:
1. -addTarget: action: forControlEvents:——为当前控件注册事件处理方法。该方法的3个参数说明:①addTarget:指定任意对象,表明将以该对象的方法作为事件处理方法。②action:接受一SEL 参数,代表一个 IBAction方法,将以该方法作为事件处理方法;③forControlEvents:——接受一个 UIControlEvents类型的枚举值,用于指定事件类型,——表明 为此种类型的事件绑定 事件处理方法。
2. removeTarget: action: forControlEvents: 删除为当前 UIControl 控件的指定事件所注册的事件处理方法,参数跟注册时意义相同。

IBAction 绑定事件处理方式与-addTarget: action: forControlEvents:的方法绑定事件处理方式的区别?
它们二者的本质是一样的。区别只在于,前者的方法更简单,但后者的方式更灵活。

通过委托对象来处理事件

对于某些控件来说,自身有一些特殊事件,前面的2种方式都没法使用。比如 UITable 控件,系统为此专门为 UITable 提供了一个事件委托接口,而实现该事件委托接口的对象负责处理该控件的特殊事件。这部分内容可以参考后面 UITable控件的详细讲解。

0 0
原创粉丝点击