2012-07-27 30 views
0

假設我有一個UIViewController(MyViewController)的子類,它有它自己的視圖,UIImageView(MyImageView)的子類和一個標準UILabel。UI控件之間的通信

在MyImageView的代碼中,我正在做一些觸摸事件的工作,以獲取被觸摸的像素的顏色,並且想要用該內容更新我的UILabel。自從MyImageView和UILabel都作爲MyViewController中的實例駐留後,什麼是實現這種通信的典型方式?

由C++即將我會加入這樣的事情MyImageView

- (空)registerMyLabel:(*的UILabel)標籤;

然後在MyViewController的初始化某處將已經註冊使用上述方法與MyImageView的的UILabel實例。我相信我可以在這裏使用類似的技術,但我想知道...是否有一個內置的機制,用Objective-C的UI控件來做到這一點?

你會如何構造這個?

回答

2

我會讓視圖控制器做視圖之間的溝通工作。

無論是觸摸操作是視圖的責任或控制器的受不同的理念,但假設我們定義視圖具有顏色檢測能力。一旦檢測到顏色,MyImageView應通過使用代理協議或發佈NSNotification來讓控制器知道。一旦提供了這些信息,控制器就可以在標籤上做任何事情。

(我喜歡,因爲鬆耦合的許多情況下比代表更好的通知。)

在任何情況下,它更符合MVC保持如果控制器負責其他部分之間通信的事件和數據需要它。

+0

關於遵守MVC哲學的好處。控制員肯定應該在視圖和模型之間進行綁定。 – VaporwareWolf 2012-07-27 01:01:51