viewWillAppear:当使用标签栏和导航控制器时,方法似乎没有响应

时间:2010-07-27 07:06:33

标签: iphone objective-c xcode uinavigationcontroller uitabbarcontroller

我正在使用Tab bar +基于导航的应用程序,我有4个标签栏。当我从一个视图控制器导航到另一个视图控制器时,viewWillAppear:方法似乎没有响应,我被迫通过创建下一个视图控制器的对象手动调用它。所以我的问题是,每当我从一个视图控制器导航到另一个视图控制器时,如何避免手动调用viewWillAppear:方法?相反,它应该自动触发,就像从一个视图控制器导航到另一个视图控制器时触发viewdidLoad:方法一样。请指导我如何做到这一点。

希望得到最好的答案 在此先感谢

6 个答案:

答案 0 :(得分:2)

你是对的,viewWillAppear有点特别,它通常会自动调用,但在某些情况下包括手动添加视图控制器视图(查看addSubview :),以及将其作为视图控制器添加到{ {1}}或UITabBarController(你们两个都有!)它没有收到消息。

然而,这仅适用于根视图,当您来回导航(可能使用导航控制器)时,根视图的viewWillAppear将被触发为某个点。

简而言之,如果你需要在这些情况下在viewWillAppear中实现某些东西,你应该在知道它将被呈现时自己发信息。您可以在视图控制器中处理这种情况,请查看以下有关此事的文章:

http://www.touchthatfruit.com/viewwillappear-and-viewdidappear-not-being-ca

祝你好运。

答案 1 :(得分:0)

在某些具有标签栏控制器的应用中,每个标签还需要一个导航控制器才能添加视图:

[[[_mainTabController topViewController] navigationController] pushViewController:renewalScreen animated:YES];

答案 2 :(得分:0)

您应该检查UITabBarDelegate然后查找方法:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

  

说明:当用户选择标签栏时发送给代理人   项目

答案 3 :(得分:0)

你的意思是标签栏上有4个标签项,而不是'4个标签栏'吗?如果您有一个带标签项的标签栏,则系统会调用viewWillAppear:方法,因为用户已选中标签。您可能有其他问题导致问题。

答案 4 :(得分:0)

你有没有忘记在某处调用[super viewWillAppear]?

答案 5 :(得分:0)

请尝试使用viewDidAppear方法。