iOS監聽事件方法(推薦順序從上往下)
- addTarget:方法監聽:
1. 適用范圍:UIControl及其子類
2. 數據通訊范圍:本文件內- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
手勢
1. 適用范圍:UI控件
2. 數據通訊范圍:本文件內
3. 不足:手勢沖突問題block
1. 數據通訊范圍:框架內所有文件
2. 作為成員變量或者作為方法的參數回調block
3. 優點:多文件間監聽方便,高級開發人員多用block
4. 不足:要注意block對self、_成員屬性的強引用造成的循環引用代理
1. 適用范圍
a 1個對象只能設置一個代理(假設這個對象只有1個代理屬性)
b 1個對象能成為多個對象的代理
2. 數據通訊范圍:框架內所有文件
3. 比通知規范,建議適用代理多于通知通知
1. 適用范圍
a 1個對象可以發通知給N個對象
b 1個對象可以接受N個對象發出的通知
2. 數據通訊范圍:框架內所有文件
3. 必須得保證通知的名字在發出和監聽時是一致的
4. 詳見"NSNotificationCenter""NSNotification"章節KVO
1. 適用范圍:僅僅是能監聽對象屬性的改變(靈活度不如通知和代理)
2. 數據通訊范圍:本文件內
3. 本質是為每一個監聽對象添加一個觀察者對象
4. 詳見"KVO"-
利用內部的某些機制
1. 適用范圍:某些特別的方法,比如重寫UITextField的becomeFirstResponder
和resignFirstResponder
來監聽UITextField的獲得焦點和失去焦點事件
2. 數據通訊范圍:本文件內/** * 調用時刻 : 成為第一響應者(開始編輯\彈出鍵盤\獲得焦點) */ - (BOOL)becomeFirstResponder { // 設置占位文字顏色 self.zq_placeholderColor = [UIColor whiteColor]; return [super becomeFirstResponder]; } /** * 調用時刻 : 不做第一響應者(結束編輯\退出鍵盤\失去焦點) */ - (BOOL)resignFirstResponder { // 恢復默認占位文字顏色 self.zq_placeholderColor = [UIColor grayColor]; return [super resignFirstResponder];; }