簡(jiǎn)單概述iOS響應(yīng)鏈和事件傳遞

文章末尾有兩個(gè)開(kāi)發(fā)中經(jīng)常遇到問(wèn)題的例子,不要錯(cuò)過(guò)喲~

前提:

UIView不接受事件處理的情況主要有以下三種
1、alpha <0.01
2、userInteractionEnabled = NO
3、hidden = YES

過(guò)程:

當(dāng)我們點(diǎn)擊View D的位置時(shí):系統(tǒng)調(diào)用 hitTest:withEvent: 方法尋找更合適的view,如果子控件是合適的view,則在子控件再調(diào)用hitTest:withEvent:查看子控件是不是合適的view,一直遍歷,直到找到最合適的view。過(guò)程如下:

1.觸摸的CGPoint在View A上嗎?在的,繼續(xù)測(cè)試A的子視圖View B、View C
2.在View B上嗎?不。在View C上嗎?在,繼續(xù)C的子視圖View D、View E
3.在View D上嗎?不,且D無(wú)subview,結(jié)束此分支
4.在View E上嗎?在,E無(wú)subview,結(jié)束此分支
5.結(jié)果形成了一個(gè)鏈,View A -->View C -->View E

當(dāng)View E無(wú)法處理此事件怎么辦?按照響應(yīng)鏈往上回溯即可,一直回溯到application,也無(wú)人處理此事件,則將事件【丟棄】。

注意:所有的響應(yīng)鏈都是父子視圖的關(guān)系,如果View A、View C、 VIew E只是視覺(jué)上遮蓋了,但是卻不是superview、subview的關(guān)系,則事件是不會(huì)在兩者之間傳遞的

事件處理兩個(gè)例子:

如圖:
1、如果b的userInteractionEnabled為NO,給a添加UITapGestureRecognizer點(diǎn)擊事件,點(diǎn)擊b會(huì)響應(yīng)a的點(diǎn)擊事件嗎?
會(huì)。因?yàn)辄c(diǎn)擊b發(fā)生觸摸事件時(shí),系統(tǒng)會(huì)從父控件進(jìn)行遍歷。因?yàn)閍添加了點(diǎn)擊事件,且b的userInteractionEnabled為NO,不接受事件處理。則系統(tǒng)認(rèn)為a是適合處理事件的view。

2、如果a的userInteractionEnabled為NO,給b添加UITapGestureRecognizer點(diǎn)擊事件,點(diǎn)擊b會(huì)響應(yīng)自己的點(diǎn)擊事件嗎?
不會(huì)。因?yàn)辄c(diǎn)擊b發(fā)生觸摸事件時(shí),系統(tǒng)會(huì)從父控件進(jìn)行遍歷。作為b的父控件,如果a的userInteractionEnabled為NO,a不接受事件處理,則無(wú)法傳遞到b,所以b不響應(yīng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先要先學(xué)習(xí)下響應(yīng)者對(duì)象UIResponder,只有繼承UIResponder的的類,才能處理事件。 我們可以看出...
    tanghaiyang閱讀 394評(píng)論 0 1
  • 不知道大家有木有經(jīng)歷過(guò),創(chuàng)建一個(gè)按鈕在Cell上,但是很多人反饋,點(diǎn)擊不了,一點(diǎn)擊就走了UITableView的d...
    BabyNeedCare閱讀 388評(píng)論 0 0
  • 前言 ??在日常的開(kāi)發(fā)過(guò)程我們經(jīng)常遇到子視圖在父視圖外面點(diǎn)擊無(wú)響應(yīng)的情況,我們通常用hitTest:withEve...
    Hedgehog___閱讀 2,497評(píng)論 0 11
  • 前言: 按照時(shí)間順序,事件的生命周期是這樣的: 事件的產(chǎn)生和傳遞(事件如何從父控件傳遞到子控件并尋找到最合適的vi...
    小蟲筆墨閱讀 1,146評(píng)論 0 14
  • 久違的晴天,家長(zhǎng)會(huì)。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí),離放學(xué)已經(jīng)沒(méi)多少時(shí)間了。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,868評(píng)論 16 22

友情鏈接更多精彩內(nèi)容