将子视图添加到UITabBarController不会调用viewWillAppear

时间:2014-07-15 09:27:30

标签: ios objective-c uitabbarcontroller childviewcontroller

我有基于标签栏的应用程序(iOS 7.1 SDK)。当用户第一次启动应用程序时,我想显示一些登录屏幕。我决定使用视图控制器包含(这在标签栏控制器的第一个视图控制器中调用):

LoginViewController *vc = [LoginViewController new];
[self.tabBarController addChildViewController:vc];
[vc didMoveToParentViewController:self.tabBarController];
[self.tabBarController.view addSubview:vc.view];

但是有一些问题。 View通常是可见的,但在LoginViewController中,从不调用viewWillAppear和viewDidAppear。我尝试在所有视图生命周期方法(viewDidLoad,viewWillAppear,viewDidAppear)中使用这段代码,但没有运气。我知道还有其他一些方法可以实现我想要做的事情。例如,将子控制器添加到标签栏控制器的第一个视图控制器并隐藏标签栏,这样可以正常工作,并且通常会调用viewWillAppear和viewDidAppear。但正因为如此,我更加好奇 - 为什么将子视图控制器添加到标签栏控制器不能按预期工作?

2 个答案:

答案 0 :(得分:0)

您需要显示或推送viewcontroller才能调用方法。只是将视图添加为子视图将无效。

在您的情况下,您可以显式调用viewWillAppear,viewDidAppear方法。

LoginViewController *vc = [LoginViewController new];
[self.tabBarController addChildViewController:vc];
[vc didMoveToParentViewController:self.tabBarController];
[self.tabBarController.view addSubview:vc.view];

[vc viewWillAppear];
[vc viewDidAppear];

答案 1 :(得分:-2)

它在工作!

dispatch_async(dispatch_get_main_queue(), ^{
        [self.tabBarController setSelectedIndex:0];
        [self.tabBarController setSelectedIndex:1];
        [self.tabBarController setSelectedIndex:0];
    });