首先,這些全屏視圖?如果是這樣,你應該考慮有3個視圖控制器,每個視圖一個,也許安裝在一個UITabBarController,這與你所描述的行爲類似。但無論如何:
不,視圖不應該告訴控制器做任何事情。
在MVC體系結構中,視圖呈現信息並接收(某些)用戶交互。控制者有責任決定如何處理該行爲。
視圖確實確實告訴控制器發生了交互。
所以你的主要問題是 - 什麼事件會產生這種行爲?
它是一個按鈕?按鈕(UIControl的子類)使用目標操作模式來處理這種通信。你的觀點應該向按鈕的引用:
@property (nonatomic, retain) UIButton *switcherButton;
接下來,在視圖控制器,你會實現一個方法:
-(void)viewSwitcherButtonTapped:(id)sender;
這是你的看法如何能告訴UI事件發生控制器。這就是它應該做的。控制器根據模型中的狀態信息或基於其自身的內部狀態或邏輯來決定當點擊該按鈕時應該發生什麼。
最後,創建視圖後,控制器將自身掛接到按鈕:
[view.switcherButton addTarget:self action:@selector(viewSwitcherButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
這樣任何視圖控制器可以使用該視圖,視圖不依賴於該參考控制器(因爲它不應該)。
但是,該按鈕只是一個示例,如果生成該行爲的事件不同,則您的實現可能會有所不同。回答這個問題,也許我可以修改這個答案來申請。
你應該看看
「模型 - 視圖 - 控制器設計模式」,在http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html
只是出於興趣「目標 - 動作機制」和「委派」,爲什麼不界面生成器? – deanWombourne 2011-05-12 10:40:53
我不確定你的意思是*引用UIViewController1到view1 *。嚴格的規則是不惜一切代價避免循環引用。如果'UIViewController1'知道'view1',那麼'view1'應該不知道'UIViewController1'。如果'view1'需要回傳,然後使用委託,目標 - 操作或通知,這些不是很難耦合的。 – PeyloW 2011-05-12 11:16:27
抱歉,我的意思是參考UIViewController1 IN view1。 – valmo 2011-05-12 11:50:53