从NavigationController呈现TabBarController的第二个Tab

时间:2014-08-17 10:51:30

标签: ios objective-c uitabbarcontroller uitabbar tabbar

我正在尝试从条目viewController(LoginViewController)成功传递时,Tab Bar打开第二个选项卡项。如果Tab Bar是应用程序的入口点,我知道该怎么做,这段代码在appDelegate.m文件中:

UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController;
[tabBar setSelectedIndex:1];

但这次对我帮助不大。

我开始想,也许解决方案是为Tab Bar Controller创建一个自定义类,但我不知道该怎么做。

现在,当用户成功登录时,这行代码控制着LoginViewController(button)和TabBarController之间的segue。

[self performSegueWithIdentifier:@"loginToTabBarSegue" sender:self];

3 个答案:

答案 0 :(得分:3)

我在DP2的stackoverflow上找到了this answer,这是我问题的解决方案。

这是我在用户成功登录时放入登录按钮的代码行。

UITabBarController *loadTabBar = [self.storyboard instantiateViewControllerWithIdentifier:@"TabBarViewControllerID"];
loadTabBar.selectedIndex=1;
[self presentViewController:loadTabBar animated:YES completion:nil];

感谢大家的帮助!

答案 1 :(得分:0)

尝试使用标签栏:

UINavigationController *nav = (UINavigationController *)self.window.rootViewController;
[nav.topViewController.tabBarController setSelectedIndex:1];

答案 2 :(得分:0)

您错误地使用了UITabBarController。标签栏控制器永远不应嵌入导航控制器中。来自Apple的文档:

  

因为UITabBarController类继承自UIViewController类,所以选项卡栏控制器具有可通过view属性访问的自己的视图。部署选项卡栏界面时,必须将此视图安装为窗口的根目录。与其他视图控制器不同,标签栏界面不应该作为另一个视图控制器的子项安装。

https://developer.apple.com/library/ios/documentation/uikit/reference/UITabBarController_Class/Reference/Reference.html

您似乎希望用户在使用您的应用之前登录。标签栏控制器包含应用程序UI的大部分内容。考虑将Tab栏控制器设置为应用程序的根视图控制器,然后让用户通过模式呈现的LoginViewController登录。