2013-08-29 27 views
2

我有一個包含基本視圖的UIViewController。視圖應基於模型而有所不同,例如根據書籍模型中的類型加載不同的子視圖。MVC設計模式 - 控制器可以有多個視圖,它們有自己的控制器嗎?

如果Book Model可能是Paperback或Magazine類型,那麼當前對象應該是Magazine類型,當前視圖應該顯示一個訂閱框子視圖。

訂閱框子視圖包含需要控制器的各種UIKit元素(例如UITextfield,UITableView),訂閱框只應該向主控制器報告一個抽象和簡化的結果(這樣主控制器不需要以直接控制UITextField和UITableView),則目標動作的示例可以是didRequestSubscription:(SubscriptionRequest *)subscription,其中SubscriptionRequest包含它們的卡細節和從U​​ITextField上的輸入和UITableView中選擇的行中獲取的訂閱期。

我是否認爲控制器可以添加一個子控件本身有一個控制器?這是否違反MVC設計模式?

我試圖想象這

enter image description here

回答

2

是可能性。這正是childViewControllers的目的。任何UIViewController都可以充當主機來查看它的直接控制和視圖,由其他UIViewController實例控制。

從MVC的角度來看,這個想法是從顯示器中分離控制數據。如果控制和顯示分成多個部分,只是(希望是好的)分區。

1

你可以做到這一點,這是完全有效的。但是您可能想要將您的控制器添加爲觀察者。 「閱讀觀察者設計模式」。

幾乎你會訂閱viewController的視圖和viewController將被通知的事件發生在你的看法。您將從視圖中推送通知,並從任何必須瞭解該事件的viewController觀察該通知。

例如您的視圖控制器將認購如下:

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
[notificationCenter addObserver:self selector:@selector(infoReceived:) name:@"data saved" object:nil]; 

而且你的觀點將力推事件如下:

NSNotification *registerNotification = [NSNotification notificationWithName:@"data saved" object:self userInfo:registerInfo]; 
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
[notificationCenter postNotification:registerNotification]; 

注意,通知的名稱是「數據保存「那麼我可以註冊儘可能多的視圖控制器,因爲我想要發生在給定視圖中的事件。

我希望這有幫助,它不會中斷MVC這是一個非常受歡迎的設計模式調用「觀察者」真的很有用,你可以使用代表工作類似的解決方案。

相關問題