iOS中的“響應者鏈”

來源:互聯網
上載者:User

在IOS開發中會遇到各種操作事件,通過程式可以對這些事件做出響應。

首先,當發生事件響應時,必須知道由誰來響應事件。在IOS中,由響應者鏈來對事件進行響應,所有事件響應的類都是UIResponder的子類,響應者鏈是一個由不同對象組成的階層,其中的每個對象將依次獲得響應事件訊息的機會。當發生事件時,事件首先被發送給第一響應者,第一響應者往往是事件發生的視圖,也就是使用者觸控螢幕幕的地方。事件將沿著響應者鏈一直向下傳遞,直到被接受並做出處理。一般來說,第一響應者是個視圖對象或者其子類對象,當其被觸摸後事件被交由它處理,如果它不處理,事件就會被傳遞給它的視圖控制器對象viewcontroller(如果存在),然後是它的父視圖(superview)對象(如果存在),以此類推,直到頂層視圖。接下來會沿著頂層視圖(top view)到視窗(UIWindow對象)再到程式(UIApplication對象)。如果整個過程都沒有響應這個事件,該事件就被丟棄。一般情況下,在響應者鏈中只要由對象處理事件,事件就停止傳遞。

一個典型的相應路線圖如:

First Responser -- > The Window -- >The Application -- > App Delegate

 

正常的響應者鏈流程經常被委託(delegation)打斷,一個對象(通常是視圖)可能將響應工作委託給另一個對象來完成(通常是視圖控制器ViewController),這就是為什麼做事件響應時在ViewController中必須實現相應協議來實現事件委託。在iOS中,存在UIResponder類,它定義了響應者對象的所有方法。UIApplication、UIView等類都繼承了UIResponder類,UIWindow和UIKit中的控制項因為繼承了UIView,所以也間接繼承了UIResponder類,這些類的執行個體都可以當作響應者。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.