【问题标题】:Presenting TabBarController's second Tab from NavigationController从 NavigationController 呈现 TabBarController 的第二个 Tab
【发布时间】:2014-10-10 11:51:20
【问题描述】:

我尝试当我从入口viewController(LoginViewController)成功通过后,Tab Bar打开第二个tab项。如果 Tab Bar 是应用程序的入口点,我知道该怎么做,这段代码在 appDelegate.m 文件中:

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

但这一次对我帮助不大。

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

现在当用户成功登录后,这行代码控制了 LoginViewController(button) 和 TabBarController 之间的连接。

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

【问题讨论】:

    标签: ios objective-c uitabbarcontroller uitabbar tabbar


    【解决方案1】:

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

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

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

    感谢大家的帮助!

    【讨论】:

      【解决方案2】:

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

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

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

      您似乎希望用户登录后才能使用您的应用。并且标签栏控制器包含您应用程序的大部分 UI。考虑将 Tab bar 控制器设置为应用的根视图控制器,然后让用户通过模态显示的 LoginViewController 登录。

      【讨论】:

        【解决方案3】:

        试试这个来获取标签栏:

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

        【讨论】:

        • 不起作用,它开始时没有错误,但登录后仍在加载第一个选项卡。我正在继续寻找解决方案...
        猜你喜欢
        • 2016-11-14
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-03
        • 2017-10-22
        相关资源
        最近更新 更多