設計模式之 Target/Action
認真對待每時、每刻每一件事,把握當下、立即去做。
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 結構更清晰。

浙公網安備 33010602011771號