2012-11-05 69 views
0

我有一個問題,以UINavigationControllers。我不知道如何表達我正在嘗試做的事情,所以我只想說一下。 :)我有一個工作的UINavigationController層次結構。它工作正常。UINavigationController「轉發」一個pushViewController

但是,我有一種情況,其中「推」ViewController類本身不顯示任何東西,而是確定哪個子ViewController「轉發」推送。

MasterVC -> DeciderVC -> forwards to fooVC 
or     -> forwards to barVC 

我想用邏輯要麼[self.navigationController pushViewController:fooVC animated:NO]barVC

的,我可以硬編碼到MasterVC基本重定向[self.navigationController pushViewController:DeciderVC animated:NO],但問題是,我想用不同的場景重用DeciderVC,而保持MasterVC,fooVC和barVC不變。我如何最好地去做這件事?

由於

編輯: 小澄清上的工作流: MasterVC顯示幾個可能的功能集。 如果用戶選擇功能集A,則DeciderObjectA被調用並輪流推fooVC,記錄數據,然後推barVC,收集數據然後再推barVC並收集數據。之後DeciderObjectA處理該數據。 如果用戶選擇功能集B,則調用DeciderObjectB,然後首先按barVC,然後按fooVC,然後處理數據。
DeciderObjects對@protocolfooVCbarVC中聲明的相同代表方法的響應不同。

回答

0

如果您的DeciderViewController沒有顯示任何內容,爲什麼它必須是UIViewController?在我看來,一個簡單的NSObject它檢查一個策略,並決定接下來推哪個控制器就足夠了。用你的術語,你在MasterVC中有代碼決定推送哪一個。 (我不明白UIViewController有什麼好處,請詳細說明我是否遺漏了一些東西。)

MasterVC -> fooVC 
MasterVC -> barVC 
+0

好點,我完全同意。所以我把Decider改成了'NSObject'。我將MasterVC中的'self.navigationController'傳遞給Decider'self.parentController'(實例變量),以便我可以訪問全局導航控制器。 然後我調用'pushViewController:fooVC'就可以了。我的問題是現在我有一個在fooVC的'protocol'中定義的委託方法,並且它不會在Decider中調用,即使它已經實現。 – Joseph

+0

更具體地說,如果我從fooVC發送消息到'[self.delegate someMethod]'我得到一個'無法識別的選擇器發送到instnance',儘管它是在Decider.m中實現的,我也在分配和初始化' fooVC' – Joseph

+0

好的。我認爲如果你仍然將ViewController從MasterVC而不是DeciderObject上移動,它會更好。DeciderObject無論是新類還是某些內聯代碼都只是做出決定。推送一個ViewController應該在ViewController中執行。那麼你也不必重置代表等等。而self.delegate不是零? – Masa

0

Can DeciderVC只需將所有內容轉發至foobar?你能否簡單地將viewDidLoad中適當的一個實例化爲Decider,並將它的view分配給Decider的視圖?

E.g.

Decider.m 
- (void) viewDidLoad:(BOOL)animated { 
... 
UIViewController *fooVC = [[FooVC alloc] init]; 
[self.view addSubview:fooVC.view]; 
... 
} 
相關問題