IOS加载TabController的UiNavigationController的不同根

时间:2015-07-02 18:43:05

标签: ios uinavigationcontroller uitabbarcontroller

我认为这会有一个简单的答案,但我似乎无法找到它。我有一个带有标签栏的IOS应用程序。您登录后会转到标签栏。对于其中一个标签按钮,我想根据条件显示不同的根视图。我创建了一个自定义的UiNavigationController,我设置了以下条件语句。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    NSString *can_post = @"yes" ;
    NSLog(@"can post: %@",can_post);


    if([can_post isEqualToString:@"yes"]) {
        // Display UserCanPostViewController
        NSLog(@"user can post");

    }
    else {
        // Display UserCanNotPostViewController
        NSLog(@"user can not post");
    }

}

问题在于我似乎无法设置根视图。我能够找到的所有示例都显示如何在appdelegate下设置根视图,这似乎会影响整个应用程序。我只想要这个条件申请单个标签按钮。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在App Delegate中......

设置标签栏以包含选项卡,这些标签是您正在讨论的特定标签的导航控制器...

...

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController1];

 [tabBarController setViewControllers:@[navigationController,
                                        viewController2,
                                        viewController3,
                                        viewController4]];

[self.window setRootViewController:tabBarController];

...

使AppDelegate成为UITabBarControllerDelegate并实现以下委托方法。

请注意,有更简洁的方法可以做到这一点,但这现在可以使用(这不是AppDelegate的工作,但你可以稍后重构,但是你想要)

...

    tabBarController.delegate = self

...

在这个委托方法中......

- (void)tabBarController:(UITabBarController * nonnull)tabBarController
     didSelectViewController:(UIViewController * nonnull)viewController
{
    if (THIS IS NOT THE SPECIFIC TAB) return;

        UINavigationController *navigationController = (UINavigationController *)viewController;

    if([can_post isEqualToString:@"yes"]) {
        // Display UserCanPostViewController
        NSLog(@"user can post");

        [navigationController setViewControllers:@[UserCanPostViewController]];
    }
    else {
        // Display UserCanNotPostViewController
        NSLog(@"user can not post");

        [navigationController setViewControllers:@[UserCanNotPostViewController]];
    }

}