假设我有一个viewcontroller“ViewBViewController”。在那个viewcontroller中,我创建了一个“ViewAViewController”的实例,并使用addSubView:方法来显示这个ViewAViewController。然后它处理一堆信息,现在完成了。我希望它在完成后自动被删除为子视图。
我正在查看removeFromSuperview方法,但似乎无法从视图我想要删除的视图控制器中调用它(我的第一直觉是[self.view removeFromSuperview],但是它摆脱了整个查看,而不仅仅是我追求的子视图。
我能想到的唯一方法是设置一个委托协议,并让View B代表View A作为其委托来卸载View A.然而,这种方法似乎有点矫枉过正。我错过了一个更简单的解决方案吗?
提前致谢!
答案 0 :(得分:7)
UIViewController
没有回复removeFromSuperview
,因为UIViewController
不是UIView
而是UIViewController
。没有惊喜。您可以在任何视图上调用removeSuperview
,例如与视图控制器关联的视图(此处为self
):
[self.view removeFromSuperview];
或者如果您只想删除一个子视图:
[mySubview removeFromSuperview];
或者如果您的子视图是self
的成员(即在界面中声明):
[self.mySubview removeFromSuperview];
答案 1 :(得分:3)
您是否尝试过:setHidden: YES
?
答案 2 :(得分:0)
这里有两个基本正确的解决方案:
使用导航控制器。如果您不希望它成为界面的一部分,则可以隐藏导航栏。然后,您可以通过调用
从任一视图控制器处置顶视图控制器及其视图// 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;
}
确保不泄漏子视图控制器及其视图非常重要。
这两种方法都有效,但使用导航控制器对我来说似乎更为惯用。