从超级视图中删除当前视图
假设我有一个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; }
确保您不泄漏子视图控制器及其视图很重要。
这两种方法都有效,但是使用导航控制器对我来说似乎更具惯用性。