2011-06-26 45 views
1

從一個UIViewController中,我編程創建一個CustomUIView的約10個實例,並將它們放在[UIViewController視圖]上。UIView與UIViewController的通信

當任何一個CustomUIView的實例被觸動時,我想讓控制器知道並採取一些行動。

我想到了兩種方法可以做到這一點:

  1. 認購的UIViewController作爲觀察員參加了CustomUIView。然後當touchesBegan:withEvent:被觸發時,在UIViewController觀察者上調用一個方法。

  2. 使用[self.nextResponder touchesBegan:touches withEvent:event]將事件引發到UIViewController。

我已經實現了兩者,他們都工作正常。

問題:以編程方式創建的視圖與其UIViewController進行通信的最佳方式是什麼?這些路要走嗎?還是有第三種方式?

我在網上找到的資源非常善於解釋所有的可可「碎片」,但是我很難找到整體架構的最佳實踐。

回答

3

對於觸摸事件的情況,你不必做任何事情!

UIViewController class reference

視圖控制器緊密結合他們所管理的意見,並採取在用於處理事件響應鏈的一部分。視圖控制器本身就是UIResponder類的後代,並被插入管理的根視圖和其超級視圖之間的響應者鏈中,該視圖通常屬於不同的視圖控制器。如果視圖控制器的視圖不處理事件,則視圖控制器本身可以選擇在將事件傳遞到超級視圖之前處理該事件。

這意味着您的視圖控制器可以在視圖中處理觸摸事件而無需任何額外的設置,只要您不在視圖中處理它們即可。

+0

好的。所以我只是在UIViewController中實現touchesBegan:withEvent:。那很好。唯一的問題是,我不知道如何獲得被觸摸的視圖的引用。想法? – Trevor

+0

'[event allTouches]'會給你觸及事件,並且對於每次觸摸,你可以通過'touch.view'來找出觸摸發生在哪個視圖。參見[UITouch類的參考](http:// developer.apple.com/library/ios/#documentation/uikit/reference/UITouch_Class/Reference/Reference.html#//apple_ref/occ/cl/UITouch)。 – jtbandes

2

如果您希望視圖能夠與控制器進行通信,您將爲UIViews製作UIViewController的delegate

觸摸事件將自動作爲responder chain的一部分發送給控制器。