Swift 奇怪 的事件響應鏈

2021-08-09 00:01:37 字數 842 閱讀 7777

初學ios開發的童鞋可能會遇到各式奇怪的問題,這篇博文本貓就為大家介紹其中乙個」怪異」問題.

該問題很好重現: 

1.使用xcode新建乙個最簡單的單vc工程,然後在storyboard中新建乙個destvc.然後從預設建立的vc(姑且稱之為initvc)拉一條segue到destvc,並設定該segue id為」todestvc」

2.開啟initvc類,只新增2個方法:

override func touchesbegan(_ touches: set, with event: uievent?) 

performsegue(withidentifier: "todestvc", sender: nil)

}

如果不想看長篇大論,可以直接看最後這一段話:

說的很清楚吧,所以如果不用segue跳轉,而是用present跳轉到destvc,現象是一樣的.

知道了原因如果避免這一」正常」的行為呢?很簡單,一種辦法是在initvc的prepare方法中關閉initvc.view的互動:

override func prepare(for segue: uistoryboardsegue, sender: any?) 

}

另一種方法則是在destvc中過載next屬性,將其置為nil,斷開responder chain即可:

override

var next: uiresponder?

iOS 中事件的響應鏈和傳遞鏈

ios事件鏈有兩條 事件的響應鏈 hit testing事件的傳遞鏈 在ios中只有繼承uiresponder的物件才能夠接收並處理事件,uiresponder是所有響應物件的基類,在uiresponder類中定義了處理上述各種事件的介面。我們熟悉的uiapplication uiviewcontr...

響應者鏈的事件傳遞過程

響應者鏈的事件傳遞過程一 hittext方法 1 hittext方法在 乙個事件傳遞給乙個控制項的時候,控制項就會呼叫這個方法 2 hittext 作用 尋找到最合適的 view 3 hittext方法 1 判斷視窗能不能處理事件 如果不能,意味著視窗不是最合適的 view 而且也不會去尋找比自己更...

iOS 響應者鏈,事件的傳遞

先將事件物件由上往下傳遞 由父控制項傳遞給子控制項 找到最合適的控制項來處理這個事件。呼叫最合適控制項的touches 方法 如果呼叫了 super touches 就會將事件順著響應者鏈條往上傳遞,傳遞給上乙個響應者 接著就會呼叫上乙個響應者的touches 方法 如果當前這個view是控制器的v...