Iphone 在基于选项卡栏的应用程序中未调用ViewDidDisplay
我有个问题。我正在开发一个基于标签栏的应用程序。在这个应用程序中,当我们想要导航到一个新视图时,我们调用[self.view addSubview:newVC.view]。newVC是我们要显示的新视图的视图控制器。当我们想返回到上一个视图时,我们还使用[self.view removeFromSuperview] 换句话说,没有导航控制器。现在的问题是,我想更新以前的视图。由于我们使用的是[self.view removeFromSuperview],因此不会调用上一个视图的ViewDidEmbeen,因此无法刷新该视图Iphone 在基于选项卡栏的应用程序中未调用ViewDidDisplay,iphone,objective-c,uitabbarcontroller,viewdidappear,Iphone,Objective C,Uitabbarcontroller,Viewdidappear,我有个问题。我正在开发一个基于标签栏的应用程序。在这个应用程序中,当我们想要导航到一个新视图时,我们调用[self.view addSubview:newVC.view]。newVC是我们要显示的新视图的视图控制器。当我们想返回到上一个视图时,我们还使用[self.view removeFromSuperview] 换句话说,没有导航控制器。现在的问题是,我想更新以前的视图。由于我们使用的是[self.view removeFromSuperview],因此不会调用上一个视图的ViewDidEm
我知道我们使用的方法有缺陷,但由于它是一个大型应用程序,将其更改为实现导航控制器需要花费很多时间,所以我需要您帮助我找到这个问题的解决方案。如何在从其子视图调用[self.view removeFromSuperview]时调用viewDidLoad或viewDidAppear或上一个视图?viewDidLoad方法调用仅当通过pushViewController方法跳入控制器时。如果您调用RemoveFromSuperView,它将调用ViewWillDisplay方法。在这里,如果您想通过tabbar从一个视图导航到另一个视图,您必须使用Mainwindow.xib中的UINavigationController,并将其viewController与App delegate连接。是的,正如Sarah所说,您应该在堆栈中保留对上一个控制器的引用。 当从堆栈中弹出控制器时,在前一个控制器上调用适当的方法。 当然,您不应该调用viewDidLoad。当您从real UINavigationController的导航堆栈中弹出控制器时,它不会被调用。 您可以调用ViewWillDisplay或ViewDidDisplay,但最好使用自己的方法,如ViewExposed,您也可以从ViewWillDisplay或ViewDidDisplay调用它。这是有用的 实现所有这些功能并从基类派生所有控制器的基类。它可能看起来像:
- (void) pushViewController:(BaseViewController *)baseController{
[self.view addSubview:baseController.view];
baseController.parentController = self;
}
- (void) pop{
[self.view removeFromSuperview];
[self.parentController viewRevealed];
}
我想您可以在[self.view removeFromSuperview]之前尝试这个[super-viewDidLoad]。我没有尝试过这个,但我认为它会起作用。你不应该自己打电话给viewDidLoad。加载视图后,将为您调用此函数。如果您手动调用它,会发生可怕的事情,尤其是在视图实际上还没有加载的情况下。您为什么不将父视图控制器引用到子视图,并通过调用您实现的方法来操作它呢?非常感谢Saran。成功了。