认真对待每时、每刻每一件事,把握当下、立即去做。
iOS 中的 Target-Action 设计模式是一种事件响应机制,用于在用户交互时触发特定对象的方法调用。
一. 基本概念
组成元素:
- Target:接收消息的对象,通常是控制器(如UIViewController)。
- Action:目标对象中待调用的方法,需符合特定签名格式(如-(void)doSomething
id)sender)。
设计目的:
通过解耦事件触发与处理逻辑,实现低耦合、高内聚的交互设计,典型应用于UIControl 子类(如 UIButton、UISlider)。
二、实现方式
代码绑定:使用 addTarget:action:forControlEvents: 方法动态关联目标与动作,例如:- [button addTarget:self
- action:@selector(handleClick:)
- forControlEvents:UIControlEventTouchUpInside];
复制代码 其中 self 为 Target,handleClick: 为Action。
Interface Builder 绑定:
通过拖拽方式在 XIB 或 Storyboard 中连接控件与控制器方法,需声明 IBAction 返回值类型以暴露接口。
三、技术细节
Action 方法签名:支持多种形式,包括:
- -(void)doSomething
- -(void)doSomething
id)sender
- -(IBAction)doSomething
id)sender forEvent UIEvent*)event
参数 sender 为触发事件的控件,event 包含触摸信息。
事件传递机制:当用户操作控件时,系统调用 sendAction:to:forEvent: 方法,通过 Target 的 SEL 选择器执行对应方法。
四、扩展应用
自定义控件:可手动实现 Target-Action 模式,例如在自定义视图中定义 target 和 action 属性,通过 performSelector: 调用目标方法。
频率控制:结合 Runtime 的方法交换(Method Swizzling),可限制按钮点击频率,避免重复请求。
五、与其他模式对比
与 Delegate 区别:Target-Action 为单向通信,适用于简单事件;Delegate 需定义协议,适合复杂交互。
与 Block 区别:Block 更灵活但可能引起循环引用,Target-Action 结构更清晰。
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |