2011-11-13 77 views
6

我有一個以編程方式創建的選項卡欄,我在初始化與視圖相關的故事板時遇到了困難。用故事板視圖控制器創建一個編程選項卡?

我可以在沒有故事板的標籤欄中成功加載視圖(見下面的代碼),但視圖只是部分顯示,因爲一些UI組件在故事板中。

我的故事板的名稱是MainStoryboard,我將故事板視圖標識設置爲SettingsViewController。

如何在下面的代碼中初始化SettingsViewController的故事板?

- (void)createTabBarItems { 
    tabBarController = [[UITabBarController alloc] init]; 

    settingsViewController = [[SettingsViewController alloc] init]; 


    UINavigationController *sett = [[[UINavigationController alloc] 
            initWithRootViewController: settingsViewController] autorelease]; 

    [sett.tabBarItem setTitle:@"Settings"]; 
    [sett.tabBarItem setImage:[UIImage imageNamed:@"settings.png"]]; 

    [tabBarController setViewControllers: 
     [NSArray arrayWithObjects:sett, sett, sett, sett, nil]]; 
} 

回答

16

如果你想在故事板,你必須用故事板的方法,而不是分配直接視圖控制器的初始化視圖控制器:

// load the storyboard by name 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

// either one of the two, depending on if your view controller is the initial one 
settingsViewController = [storyboard instantiateInitialViewController]; 
settingsViewController = [storyboard instantiateViewControllerWithIdentifier:@"SettingsViewController"]; 
+0

我在代碼的第一行收到錯誤「沒有選擇器的已知類方法」storyBoardWithName:'「。所以我在代碼的第一行添加了「bundle:nil」。現在我收到錯誤消息:「不支持導航控制器」我能做些什麼來修復錯誤,並且通過添加「bundle:nil」來做正確的事情? – kevin

+0

它現在正在工作......我有一些代碼混在一起。謝謝! – kevin

+0

謝謝,bundle參數確實缺失,我糾正了這一點。 'bundle:nil'很好,因爲這會在主包中進行查找。 –

0

斯威夫特4

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
settingsViewController = storyboard.instantiateInitialViewController() 
settingsViewController = storyboard.instantiateViewController(withIdentifier: "SettingsViewController") 
相關問題