从超级视图中删除当前视图

假设我有一个viewcontroller“ViewBViewController”。 在该视图控制器中,我创build了“ViewAViewController”的实例,并使用addSubView:方法来显示此ViewAViewController。 然后处理一堆信息,现在就完成了。 我想它会自动删除作为一个子视图,当它完成。

我正在看removeFromSuperview方法,但似乎无法从视图控制器的视图我试图删除(我的第一个本能是[self.view removeFromSuperview],但是摆脱整个视图,而不是只是我后面的子视图)。

我能想到的唯一方法是设置一个委托协议,让View B负责代表View A卸载View A作为其委托。 然而这种方法似乎有点矫枉过正。 我错过一个更简单的解决scheme?

提前致谢!

你尝试过: setHidden: YES

UIViewController不响应removeFromSuperview ,因为UIViewController不是UIView而是UIViewController 。 那里没有惊喜。 您可以在任何视图上调用removeSuperview ,例如与视图控制器相关的视图(这里是self ):

 [self.view removeFromSuperview]; 

或者如果你只是想删除一个子视图:

 [mySubview removeFromSuperview]; 

或者如果你的子视图是自己的成员(即声明在接口说):

 [self.mySubview removeFromSuperview]; 

这里有两个基本正确的解决scheme:

  • 使用导航控制器。 如果您不希望它成为界面的一部分,则可以隐藏导航栏。 然后,您可以通过调用从任何视图控制器中处理顶部视图控制器及其视图

     // argument can be YES or NO, as you like [self.navigationController popViewControllerAnimated:YES]; 
  • 使用一个委托调用,告诉父视图控制器做类似的事情

     -(void)removeViewA { // remove the view from the view hierarchy [self.viewAController.view removeFromSuperview]; // dispose of the view controller so it doesn't leak. self.viewAController = nil; } 

确保您不泄漏子视图控制器及其视图很重要。

这两种方法都有效,但是使用导航控制器对我来说似乎更具惯用性。