使用故事板视图控制器创建编程式选项卡栏?

8

我有一个通过编程创建的选项卡栏,我在初始化与视图相关联的故事板时遇到了困难。

我能够成功地在没有故事板的情况下加载视图(请参见下面的代码),但是由于某些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]]; 
}
2个回答

18

如果你想像storyboard里一样初始化视图控制器,那么你需要使用故事板方法而不是直接分配视图控制器:

// 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"];

我在你的代码第一行收到了一个错误:“No known class method for selector 'storyBoardWithName:'”。所以我在你的代码第一行添加了“bundle:nil”。现在我得到了错误:“Pushing a navigation controller is not supported”。我该怎么做才能修复这个错误?我添加“bundle:nil”是正确的吗? - kevin
现在它可以工作了...我把一些代码搞混了。谢谢! - kevin
谢谢,确实缺少bundle参数,我已经纠正了。bundle:nil是可以的,因为这将在主bundle中进行查找。 - Dennis Bliefernicht

0

Swift 4

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接