我有问题。我正在开发一个基于标签栏的应用程序。在此应用中,当我们要导航到新视图时,我们会调用[self.view addSubview:newVC.view]
。 newVC是我们想要显示的新视图的视图控制器。当我们想要返回上一个视图时,我们也会使用[self.view removeFromSuperview]
。
换句话说,没有导航控制器。现在的问题是我想更新以前的视图。由于我们使用[self.view removeFromSuperview]
,之前视图的viewDidAppear
未被调用,因此我们无法刷新该视图。
我知道我们使用的方法有缺陷,但由于它是一个大规模的应用程序并改变它来实现导航控制器需要花费很多时间所以我需要你帮我找到这个问题的解决方案。如何从其子视图中调用viewDidLoad
或viewDidAppear
或上一个关于调用[self.view removeFromSuperview]
的视图?
答案 0 :(得分:0)
viewDidLoad
方法跳转到控制器时, pushViewController
方法调用。如果您致电removeFromSupreView
,则会调用viewWillAppear
方法。如果您想通过标签栏从一个视图导航到另一个视图,则必须在UINavigationController
中使用Mainwindow.xib
并将其viewController与App委托连接。
答案 1 :(得分:0)
是的,正如Sarah所说,您应该在“堆栈”中保留对前一个控制器的引用。
当从堆栈“弹出”控制器时,在前一个控制器上调用适当的方法。
当然你不应该调用viewDidLoad(当你从真实UINavigationController
的导航堆栈中弹出控制器时不会调用它。
您可以拨打viewWillAppear
或viewDidAppear
,但最好使用自己的方法,例如viewRevealed(您也可以从viewWillAppear
或viewDidAppear
调用)。它很有用
基类,实现所有这些功能,并从基类派生所有控制器。它可能看起来像:
- (void) pushViewController:(BaseViewController *)baseController{
[self.view addSubview:baseController.view];
baseController.parentController = self;
}
- (void) pop{
[self.view removeFromSuperview];
[self.parentController viewRevealed];
}