2

我有基于标签栏的应用程序(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。但正因为如此,我更加好奇——为什么将子视图控制器添加到标签栏控制器不能按预期工作?

4

2 回答 2

0

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

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

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

[vc viewWillAppear];
[vc viewDidAppear];
于 2014-07-15T09:32:59.287 回答
-2

它正在工作!

dispatch_async(dispatch_get_main_queue(), ^{
        [self.tabBarController setSelectedIndex:0];
        [self.tabBarController setSelectedIndex:1];
        [self.tabBarController setSelectedIndex:0];
    });
于 2016-02-17T09:58:21.383 回答