1

我有个问题。我正在开发一个基于标签栏的应用程序。在这个应用程序中,[self.view addSubview:newVC.view]当我们想要导航到新视图时调用。newVC 是我们要显示的新视图的视图控制器。[self.view removeFromSuperview]当我们想回到以前的视图时,我们也会使用。

所以换句话说,没有导航控制器。现在的问题是我想更新以前的视图。由于我们使用的是[self.view removeFromSuperview]viewDidAppear之前的视图不会被调用,因此我们无法刷新该视图。

我知道我们使用的方法有缺陷,但由于它是一个大型应用程序,并且更改它以实现导航控制器需要很多时间,所以我需要你帮助我找到这个问题的解决方案。如何在从其子视图调用时调用viewDidLoadviewDidAppear或前一个视图?[self.view removeFromSuperview]

4

2 回答 2

0

viewDidLoad仅当您通过方法跳转到控制器时才调用pushViewController方法。如果您调用removeFromSupreView,它将调用viewWillAppear方法。在这里,如果您想通过标签栏从一个视图导航到另一个视图,您必须使用其中UINavigationControllerMainwindow.xibviewController 并将其连接到 App 委托。

于 2011-09-13T06:45:12.507 回答
0

是的,正如莎拉所说,您应该在“堆栈”中保留对先前控制器的引用。当从堆栈中“弹出”控制器时,在前一个控制器上调用适当的方法。当然,您不应该调用 viewDidLoad (当您从 real 的导航堆栈中弹出控制器时不会调用它UINavigationController)。您可以调用viewWillAppearor viewDidAppear,但最好使用您自己的方法,例如 viewRevealed (您也可以从viewWillAppearor调用它viewDidAppear)。使基类实现所有这些功能并从基类派生所有控制器是很有用的。它可能看起来像:

- (void) pushViewController:(BaseViewController *)baseController{
  [self.view addSubview:baseController.view];
  baseController.parentController = self;
}
- (void) pop{
  [self.view removeFromSuperview];
  [self.parentController viewRevealed];
}
于 2011-09-13T13:13:12.893 回答