UIResponder

響應鏈的構成

app中,視圖都是按照樹狀結構組織起來的赞哗,構成樹狀結構的同時也構成了響應鏈雷则。

找到第一響應者的過程

用戶觸發(fā)某一事件后,UIKIt生成一個UIEvent對象肪笋,該對象包含一些處理事件所需信息月劈。處理事件時度迂,UIApplication對象把事件分發(fā)給window對象,window對象分發(fā)給事件發(fā)生的VC視圖上艺栈,視圖按照觸摸的位置遞歸檢測其所有子視圖英岭,包含觸摸點的最底層視圖就是hit-testing視圖。系統(tǒng)將事件發(fā)送給這個視圖處理湿右,然后就是視圖響應鏈的過程

響應鏈的響應過程

1.觸發(fā)了一個事件诅妹,app首先按照樹狀結構找到第一響應者(通過hit-test方式)
2.如果第一響應者不能處理事件,傳遞給他的父視圖毅人,一直循環(huán)到viewController
3.如果viewController無法處理吭狡,傳遞給window對象
4.如果window對象無法處理,傳遞給UIApplication對象處理丈莺,如果還是無法處理划煮,丟棄事件

如果父視圖有如上設置
view.hidden=YES;
view.alpha = 0.0f;
view.userInteractionEnabled = NO;
則子視圖不能接受觸摸事件,包括攔截操作

攔截響應者鏈

需要攔截響應者對象的View重寫

  • (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;方法
    方法1缔俄,返回需要響應的視圖(推薦)
    方法2弛秋,返回自己,但是因為尋找響應者的過程是后添加的視圖先檢查俐载,所以有可能沒遍歷到自己就找到了真正響應的view蟹略,攔截失敗

管理響應者鏈

Returns the next responder in the responder chain, or nil
if there is no next responder.
The UIResponder
class does not store or set the next responder automatically, so this method returns nil
by default. Subclasses must override this method and return an appropriate next responder. For example, UIView
implements this method and returns the UIViewController object that manages it (if it has one) or its superview (if it doesn’t). UIViewController similarly implements the method and returns its view’s superview. UIWindow
returns the application object. UIApplication
returns nil
Returns
The next object in the responder chain or nil
if this is the last object in the chain.

  • (nullable UIResponder*)nextResponder;

//Tells this object when a physical button is first pressed.
UIKit calls this method when a new button is pressed by the user. Use this method to determine which button was pressed and to take any needed actions.
The default implementation of this method forwards the message up the responder chain. When creating your own subclasses, call super
to forward any events that you do not handle yourself.

Parameters
presses
A set of UIPress instances that represent the new presses that occurred. The phase of each press is set to UIPressPhaseBegan.
event
The event to which the presses belong.
//物理設備回調(diào),UIPress對象告訴你哪個按鈕被按了

  • (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event ;

//接收到遠程設備命令時調(diào)用遏佣,為了允許分發(fā)遠程控制事件挖炬,我們必須調(diào)用UIApplication的beginReceivingRemoteControlEvents方法;而如果要關閉遠程控制事件的分發(fā)状婶,則調(diào)用endReceivingRemoteControlEvents方法意敛。

  • (void)remoteControlReceivedWithEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(4_0);

//驗證命令,啟用或禁用指定的命令

  • (BOOL)canPerformAction:(SEL)action withSender:(id)sender

//

  • (nullable id)targetForAction:(SEL)action withSender:(nullable id)sender

輸入視圖

@property (nullable, nonatomic, readonly, strong) __kindof UIView *inputView NS_AVAILABLE_IOS(3_2);
@property (nullable, nonatomic, readonly, strong) __kindof UIView *inputAccessoryView NS_AVAILABLE_IOS(3_2);
當對象變?yōu)榈谝豁憫邥r膛虫,顯示另外的視圖用來處理信息輸入草姻,比如UITextField,UITextView的鍵盤稍刀,自定義鍵盤就是用自定義的view替換
//視圖立即被替換
-(void)reloadInputViews

獲取undoManager

可以用來執(zhí)行對應視圖的undo和redo操作

http://www.th7.cn/Program/IOS/201603/774913.shtml

http://southpeak.github.io/2015/03/07/cocoa-uikit-uiresponder/

https://segmentfault.com/a/1190000004529341

http://www.reibang.com/p/6dbd931eefb0

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碴倾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掉丽,更是在濱河造成了極大的恐慌,老刑警劉巖异雁,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捶障,死亡現(xiàn)場離奇詭異,居然都是意外死亡纲刀,警方通過查閱死者的電腦和手機项炼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锭部,你說我怎么就攤上這事暂论。” “怎么了拌禾?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵取胎,是天一觀的道長。 經(jīng)常有香客問我湃窍,道長闻蛀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任您市,我火速辦了婚禮觉痛,結果婚禮上,老公的妹妹穿的比我還像新娘茵休。我一直安慰自己薪棒,他們只是感情好,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布榕莺。 她就那樣靜靜地躺著俐芯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帽撑。 梳的紋絲不亂的頭發(fā)上泼各,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音亏拉,去河邊找鬼扣蜻。 笑死,一個胖子當著我的面吹牛及塘,可吹牛的內(nèi)容都是我干的莽使。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼笙僚,長吁一口氣:“原來是場噩夢啊……” “哼芳肌!你這毒婦竟也來了?” 一聲冷哼從身側響起肋层,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤亿笤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后栋猖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體净薛,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年蒲拉,在試婚紗的時候發(fā)現(xiàn)自己被綠了肃拜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痴腌。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖燃领,靈堂內(nèi)的尸體忽然破棺而出士聪,到底是詐尸還是另有隱情,我是刑警寧澤猛蔽,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布剥悟,位于F島的核電站,受9級特大地震影響枢舶,放射性物質(zhì)發(fā)生泄漏懦胞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一凉泄、第九天 我趴在偏房一處隱蔽的房頂上張望躏尉。 院中可真熱鬧,春花似錦后众、人聲如沸胀糜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽教藻。三九已至,卻和暖如春右锨,著一層夾襖步出監(jiān)牢的瞬間括堤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工绍移, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悄窃,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓蹂窖,卻偏偏與公主長得像轧抗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞬测,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • //// UIResponder.h// UIKit//// Copyright (c) 2005-2016...
    李某lkb閱讀 793評論 0 0
  • 一. Hit-Testing 什么是Hit-Testing?對于觸摸事件, window首先會嘗試將事件交給事件觸...
    面糊閱讀 832評論 0 50
  • 好奇觸摸事件是如何從屏幕轉移到APP內(nèi)的横媚?困惑于Cell怎么突然不能點擊了?糾結于如何實現(xiàn)這個奇葩響應需求月趟?亦或是...
    Lotheve閱讀 57,337評論 51 599
  • 本篇包括2部分:前篇是UIResponder的官方API的記錄,后篇是對官方API的理解 UIResponder概...
    你好自己閱讀 1,430評論 0 7
  • 1折砸、你以為那些瞬間讓你美白的面膜能讓你一直美白到老嗎? 不沙峻!可睦授!能!那些面膜會讓你老得更快摔寨!長期使用可出現(xiàn)多毛去枷、痤...
    阿昱_閱讀 189評論 0 0