Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在基于选项卡栏的应用程序中未调用ViewDidDisplay_Iphone_Objective C_Uitabbarcontroller_Viewdidappear - Fatal编程技术网

Iphone 在基于选项卡栏的应用程序中未调用ViewDidDisplay

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 addSubview:newVC.view]。newVC是我们要显示的新视图的视图控制器。当我们想返回到上一个视图时,我们还使用[self.view removeFromSuperview]

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


我知道我们使用的方法有缺陷,但由于它是一个大型应用程序,将其更改为实现导航控制器需要花费很多时间,所以我需要您帮助我找到这个问题的解决方案。如何在从其子视图调用[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。成功了。