UIResponder介紹,uiresponder
該UIResponder類定義了響應和處理事件的對象介面。它是UIView和UIApplication的超類(UIWindow)。這些類的執行個體有時被稱為響應者對象,簡單地說就是響應者。
通常有2種事件類型,觸摸事件和移動事件。
處理觸摸事件的主要方法
1.touchesBegan:withEvent:
2.touchesMoved:withEvent:
3.touchesEnded:withEvent:
4.touchesCancelled:withEvent:
這些方法的參數與觸摸它們的事件相關聯,開始觸摸以及觸摸位置的改變都會發生觸摸事件。因此iOS允許在多點觸摸中響應者分別追蹤和處理觸摸。只要手指觸控螢幕幕,滑動,從螢幕離開,都會產生一個UIEvent對象,事件包括UITouch對象
處理移動事件的主要方法
1.motionBegan:withEvent:
2.motionEnded:withEvent:
3.motionCancelled:withEvent:
另外,canPerformAction:withSender: 方法允許響應程式來驗證使用者介面中的命令,而 undoManager 屬性返回最近的在響應鏈中NSUndoManager 對象。
UIEventType結構體定義了事件類型。
typedef NS_ENUM(NSInteger, UIEventType) { UIEventTypeTouches, UIEventTypeMotion, UIEventTypeRemoteControl,#ifndef SDK_HIDE_TIDE UIEventTypePresses NS_ENUM_AVAILABLE_IOS(9_0),#endif};
管理響應者鏈
- (nullable UIResponder*)nextResponder 返回當前接收者的下一個響應者,如果沒有返回nil。讓響應鏈中下一個對象處理事件。 UIResponder類預設會返回nil,並不會自動儲存或設定下一個響應者。因此它的子類必須重寫此方法以設定下一個響應者。是響應者鏈行程順序 、
- (BOOL)isFirstResponder 判斷接收者是否為第一響應者。返回YES則該訊息接收者為第一響應者,反之不是第一響應者。
- (BOOL)becomeFirstResponder 通知接收者在其視窗中它即將成為第一響應者。預設返回YES。
- (BOOL)resignFirstResponder 解除當前接收者為第一響應者。
- (BOOL)canResignFirstResponder 判斷接收者是否可以解除第一響應者。返回yes為可以,反之不可以解除。
管理輸入視圖
@property (nullable, nonatomic, readonly, strong) __kindof UIView *inputView
當接收者成為第一響應者時顯示的自訂視圖。此屬性通常用於提供一個視圖以更換 UITextField 和 UITextView 對象提供的系統鍵盤。它為唯讀屬性。當接收者成為第一響應者時該視圖自動呈現,同樣解除第一響應者時該視圖應該自動消失。
@property (nullable, nonatomic, readonly, strong) UIInputViewController *inputViewController 同上。
- (void)reloadInputViews 當接收者為第一響應者時更新輸入視圖或子視圖。
響應觸摸事件
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
當開始觸控螢幕幕是發生。touches為事件觸摸的UITouch執行個體的集合。event是引起事件的對象。
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
當一根或多根手指在螢幕中移動時發生
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
當一根或多根手指在螢幕中離開時發生
- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
觸摸取消時發生(記憶體吃緊)