2014-05-07 63 views
0

我是新來的Objective-C,和我正在尋找關於如何管理多個視圖控制器一些建議。Objective-C的管理多個視圖控制器

我已經查看了他們的內置容器視圖控制器類的Apple文檔,他們都不是我正在尋找 - 最接近的是NavigationController,但即使這似乎有點關閉。

我想要實現的一系列ViewControllers的 - 它們使用xibs他們的接口 - 從一個根據接下來的一系列規則的過渡。例如,在應用加載時,我們會看到本地存儲中是否有userId - 如果我們不存在,請顯示註冊屏幕。接下來,有一個按鈕(說)命令出租車 - 如果該按鈕被點擊,顯示確認屏幕。

另外可選另外:我認爲這不符合導航控制器的原因是流程看起來不是層次結構,而是一種分枝和線性。一個具體的例子是我不需要導航欄返回,這似乎是導航控制器上的標準。但我不太瞭解NavigationController,無法確定它是否適合此用例。

我一直在用各種方法破解這個。例如,在一個IBAction爲處理程序中,我使用此代碼過渡到一個新的視圖控制器中:

UIViewController *view = [[UIViewController alloc] initWithNibName:@"CCWConfirmViewController" bundle:nil]; 
view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentViewController:view animated:YES completion:nil]; 

而且,在我的窗口的「根」視圖控制器(我設置是SignupViewController)initWithNibName,我返回不同的視圖控制器不是一個要求,根據本地存儲的呼叫我前面提到的結果:

if (currentUser.userId) { 

     // Instead of returning the SignupViewController, like was asked, 
     // return the MainViewController, since signup isn't needed for existing 
     // users. 
     CCWMainViewController *mvc = [[CCWMainViewController alloc] init]; 
     return mvc; 

我看起來像我必須做一些錯誤的(第二黑客建立而產生警告,因爲我正在返回一個指向錯誤類型的指針)。任何人都知道更好的方法?畢竟是我的NavigationController,而我只是誤解了它的目的?我只需要實現一個自定義容器來充當我的RootViewController並管理這些其他ViewControllers?

回答

1

你的決定是對的。你不需要一個導航控制器來達到你的目的,但正如他們所說的那樣。有很多方法可以實現結果。

「我並不需要一個導航欄回去,這似乎標配的導航控制器」

您可以隨時隱藏使用self.navigationController.navigationBarHidden = YES

導航欄回來的時候,我不會說你做了什麼是錯的,但會提出一個更好的辦法,涉及觀點遏制的概念。

在可可觸摸您可以添加任何視圖控制器作爲子視圖控制器。所以這是我的建議。 創建一個名爲RootViewController的類,無論用戶登錄或不登錄,始終都會創建並設置爲您的窗口。在這個類別的viewDidLoad

-(void)viewDidLoad 
{ 
    if (currentUser.userId) { 
     CCWMainViewController *mvc = [[CCWMainViewController alloc] init]; 
     [self addChildViewController:mvc]; 
     mvc.view.frame = self.view.bounds; 
     [self.view addSubview:mvc.view]; 
    } 
    else{ 
    //Create signup/login view and add to view as above. 
    } 
} 
+0

嘿,我真的很喜歡這個。看起來編譯器並不喜歡這個:[self。查看addSubview:mvc.view.frame] - 它應該是[self.view addSubview:mvc.view](沒有'幀'調用結束)? –

+0

對不起,我的壞!複製粘貼的副作用:)你是對的,請看我的編輯我的答案。 – Suhas

相關問題