添加子视图到UITabBarController而不是调用viewWillAppear



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

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

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

您需要呈现或推送视图控制器以便调用方法。只是将视图添加为子视图是行不通的。

在你的例子中,你可以显式地调用viewWillAppear, viewDidAppear方法。

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

成功了!

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

最新更新