IOS開發之──事件響應

來源:互聯網
上載者:User

   事件出現在iphone上有三種主要方式:通過動作、通過委託事件、通過通知。

   iphone事件響應來自於UIResponder對象,而iphone通知來自於NSNotificationCenter。不必擔心如何訪問響應者的方法和屬性,因為UIResponder對象是多數UIKit對象的父級,但是NSNotificationCenter卻需要特殊訪問。

   一、事件和動作

   多數使用者在iphone上輸入會產生置於響應者鏈中的一個事件。響應者鏈是一組對象連結集,多數部分是通過視圖階層向上延伸的。任何輸入都是由第一響應者先捕捉到的,它一般是與使用者直接互動的對象。如果此對象不能解析輸入,那麼它會將輸入向上發送到其超視圖(例如:標籤可能會將輸入發送到其全螢幕視圖),然後再到其超視圖,不斷向上拋(例如:向上至視圖,然後向上至視圖控制器)。如果輸入沿著視圖階層一直向上至視窗對象,那麼之後,它會被發送到應用程式本身,並最終傳遞到應用程式委託。

 

   這些對象中的任何一個都可以選擇處理一個事件,這將會停止回應者鏈的傳遞。按照標準的MVC模式,通常要將事件響應構建到UIViewControllers對象中,此對象在響應者鏈中相當遠。

 

   對於任一種UIControl對象,如按鈕、滑塊、切換開關,事件通過會轉變為動作。事件當觸摸報告到螢幕,而動作則報告控制項的操作,因此也更易讀。動作所遵循的響應階層略有不同。

 

   二、委託和資料來源

   通過委託:可以將事件發送到非第一響應者的對象。也就是一個對象(通常是視圖控制器)處理另一個對象(通常是視圖)的事件。它是資料來源的近親,資料來源也是一個對象處理另一個對象的資料設定和控制。

 

   委託和資料來源分別由一個協議控制,協議是委託和資料來源同意響應的一組方法。例如:表格的委託可能必須要響應的一個方法,該方法在表格的行被選定時會警告它。類似地,表格式資料源可能用於描述表格所有行的外觀。

 

   委託和資料來源可以完美地適應Objective─C使用的MVC模式,因為它們允許視圖將其工作轉交給其控制器而不必擔心這些對象在響應者鏈中的位置。

 

   三、通知

   標準事件響應和委託代表了就標準事件(例如手指觸控螢幕幕)向對象發出警告的兩種方式。還可以使用第三種方式──通知──規劃許多不同類型的活動,比如iphone方向的改變或網路連接關閉。

 

   對象註冊使用NSNotificationCenter接收一定類型的通知,然後相應地處理這些通知。

 

   所有通知通過 NSNotificationCenter發生,要使用它,必須建立該共用對象的一份副本:

   [NSNotificationCenter defaultCenter]

   之後,可以使用- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject方法來請求某個通知。observer是一個對象(通常是self),將接收通知方法,selector:是將在觀察程式中調用的方法,name:是通知的名稱(將出現在類參考中),object:是你想要限制從哪些對象接收通知時使用的參數(但是它通常設定為nil);

   例如:要接收我們的應用UIApplicationWillTerminateNotification終止通知時,可以使用如下代碼:

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willTerminate:) name:UIApplicationWillTerminateNotification object:nil];

   總之,通知一般有如下四個步驟:首先,通過讀取適當的參考,瞭解到一有一個通知。其次,可能需要顯示地開啟通知(對於UIApplicationWillTerminateNotification就是這樣),第三,編寫一個方法響應通知(在上述例子是用:-(void)willTerminate:(NSNotification *)notification),第四,利用NSNotificationCenter將通知與方法相連。

 

    通知系統中還有更強大的功能,你不僅可以設定多個觀察者,也可以張貼自己的通知。

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.