2015-02-05 98 views
0

看來有幾種方法可以創建UINavigationController作爲第一個控制器。也許最簡單的方法是簡單地點擊Storyboard中的View Controller並將其嵌入到導航控制器中。但我想知道只有在代碼中才能做到這一點的最佳方法。爲第一個UIViewController創建一個UINavigationController

你也可以繼承UINavigationController,導入第一個視圖控制器,並在viewDidLoadallocinit一個實例,然後將其添加爲childViewController。在故事板中,用導航控制器替換默認視圖控制器,並將類設置爲導航控制器。請注意,在以前的iOS版本中,不建議子類UINavigationController

或者你可以創建另一個UIViewControlleralloc init第一視圖控制器,然後alloc init一個UINavigationController與視圖控制器爲根,添加導航控制器,因爲這視圖控制器的子視圖控制器,並添加導航控制器的視圖該視圖控制器視圖的子視圖。在Storyboard中更改視圖控制器的類。但這是一個尷尬的設置,因爲您創建了一個視圖控制器,其目的是添加一個導航控制器,但它本身不是導航控制器。

我讀過關於另一種方法,涉及在AppDelegate中創建UINavigationController。也許還有更多的解決方案。

在最新的開發環境中,針對iOS 8+的最合適的方法是什麼?

+0

「最好」是一種主觀的東西。你對什麼具體情況感興趣?你是在談論使用沒有故事板,或者有一個想要嵌入導航控制器的初始視圖控制器的故事板? – rdelmar 2015-02-05 17:49:47

+0

爲什麼不在故事板中查看它在應用程序代理中爲您生成的代碼。然後你會看到它是如何完成的。第一個控制器是您在故事板中選擇的屬性檢查器中的初始控制器。 – 2015-02-05 17:49:53

+0

@rdelmar儘可能地保持默認的故事板不變,在代碼中執行所有的操作。如果它可以完全移除,那麼在這種情況下最好。 – Joey 2015-02-05 18:15:00

回答

0

如果您從故事板中的控制器開始,則只需在應用程序委託中添加兩行即可將該控制器嵌入到導航控制器中。如果你想這樣做的代碼,我覺得這是最簡單的方法,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.window.rootViewController]; 
    self.window.rootViewController = nav; 
    return YES; 
} 

如果你想這樣做完全是在代碼中,沒有故事板,那麼你需要創建窗口,導航控制器,和它的根視圖控制器。您還需要點擊文件列表中的項目圖標,然後在「常規」標籤中,從「主界面」下拉菜單中刪除單詞「main」(該條目告訴系統以名爲「main .storyboard「)。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    ViewController *vc = [ViewController new]; // You need to create this controller's view in its loadView method 
    vc.title = @"Root View Controller"; 
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; 
    [self.window setRootViewController:nav]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
相關問題