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