首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iOS 事件傳遞鏈:自定義 View 上的按鈕點擊事件應綁定給誰?

     編輯:程式設計疑難解答

結論

按鈕的 target-action 通常綁定到視圖控制器或持有該視圖的對象,而非視圖本身。視圖(UIView)不處理業務邏輯。

事件傳遞流程

  1. 觸摸發生 → UIApplication → UIWindow → hitTest:withEvent: 找到最內層視圖(按鈕)。
  2. 按鈕響應 UIControlEventTouchUpInside,調用註冊的 target-action。
  3. 若按鈕未處理,事件順響應者鏈向上傳遞:Superview → ViewController → Window → Application。

代碼示例

// 在 ViewController 中配置
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];

// 或在自定義 View 初始化時,若 View 持有弱引用的 delegate
[button addTarget:self.delegate action:@selector(customView:didTapButton:) forControlEvents:UIControlEventTouchUpInside];

避坑

  • 不要在視圖內部對 self(視圖)註冊 target,視圖被釋放時 target 成為懸空指針。
  • 使用 weak 引用 delegate 防止循環保留。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved