?iOS 響應(yīng)者鏈
字?jǐn)?shù)418 閱讀41 評(píng)論0 喜歡3
響應(yīng)者鏈
響應(yīng)者鏈?zhǔn)且粋€(gè)響應(yīng)者的連接序列,事件或者動(dòng)作消息依次傳遞洒忧,它允許響應(yīng)者把事件處理的職責(zé)轉(zhuǎn)交給其他更高層次的對(duì)象蝴韭。應(yīng)用程序通過向上傳遞一個(gè)事件來查找合適的處理對(duì)象,因?yàn)辄c(diǎn)擊監(jiān)測視圖也是一個(gè)響應(yīng)者對(duì)象熙侍,應(yīng)用程序在處理觸摸事件的時(shí)候榄鉴,也可以利用響應(yīng)者鏈。
由多個(gè)響應(yīng)者組成的鏈
響應(yīng)者
iOS中所有能響應(yīng)事件(觸摸蛉抓,晃動(dòng)庆尘,遠(yuǎn)程事件)的對(duì)象都是響應(yīng)者。
系統(tǒng)定義了一個(gè)抽象的父類UIResponder來表示響應(yīng)者巷送,其子類都是響應(yīng)者驶忌。
響應(yīng)者的檢測事件
硬件檢測到觸摸事件,會(huì)將信息交給UIApplication,開始檢測付魔。
UIApplication -> window -> viewController -> view -> 檢測所有子類聊品。
最終確認(rèn)觸碰的位置,完成響應(yīng)者鏈的查詢過程几苍。
處理觸摸事件
檢測到響應(yīng)者后翻屈,實(shí)現(xiàn)touchesBegain:withEvent;等方法妻坝,即處理事件伸眶。
如果響應(yīng)者沒有處理事件,事件會(huì)向下傳遞刽宪。如果沒有響應(yīng)者處理厘贼,則丟棄觸摸事件。
事件處理的順序與觸摸檢測查詢檢測的順序相反。
觸摸的子視圖 -> view -> viewController -> window -> UIApplication。
阻斷響應(yīng)者鏈
響應(yīng)者鏈可以被打斷,無法完成檢測查詢的過程。
視圖類的屬醇坝,userInteractionEnabled,關(guān)閉后能阻斷查詢過程窍仰。