我正在尝试使用以下代码来显示tabbarcontroller
UITabBarController *tc = [[self storyboard] instantiateViewControllerWithIdentifier:@"tabbarcontroller"];
[self.navigationController pushViewController:tc animated:YES];
它确实加载了视图,我可以告诉它我希望它默认的哪个选项卡。问题是标签没有显示。根据我的阅读,我收集它与将标签控制器放在导航控制器内部有关,但我找不到任何解决方案。
答案 0 :(得分:1)
您UITabBarController
内的UIViewControllers
内容UINavigationController
,可能位于UITabBarController
内。
你不应该推{{1}}。你可以看到Apple的解释here:
使用标签栏控制器的应用也可以使用导航 一个或多个选项卡中的控制器。当结合这两种类型时 在同一用户界面中查看控制器,标签栏控制器 始终充当导航控制器的包装器。
使用标签栏控制器的最常用方法是嵌入其视图 在你的应用程序的主窗口中。 (...)
你仍然可以模态地呈现它:
可能(虽然不常见)提供标签栏控制器 在你的应用程序中模态化。标签栏界面通常安装在您的 应用程序的主窗口,仅在需要时更新。但是,你可以 如果您的界面设计,则以模态方式显示标签栏控制器 似乎值得保证。例如,要从应用的主要内容切换 操作模式到使用标签栏的完全不同的模式 界面,您可以模态呈现辅助标签栏控制器 使用交叉渐变过渡。
答案 1 :(得分:0)
如果你使用Storyboard,使用pushViewController方法是一个糟糕的选择(如果它工作)。您必须插入“ segue ”。
进入故事板并按
现在你有了segue。点击出现的圈,然后选择此segue的标识符,例如: MainToTab 。
现在,在您的方法中,您只需致电:
[self performSegueWithIdentifier:@"MainToTab" sender:self];
此外,如果您想在目标控制器上管理属性(通过segue),您可以实现此方法:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"MainToTab"]) {
UITabViewController *tb = (UITabViewController *)segue.destinationViewController;
//set the properties...
}
}
启动上一个方法时会自动调用此方法。