从superview中删除当前视图

时间:2011-06-01 22:42:12

标签: iphone ios

假设我有一个viewcontroller“ViewBViewController”。在那个viewcontroller中,我创建了一个“ViewAViewController”的实例,并使用addSubView:方法来显示这个ViewAViewController。然后它处理一堆信息,现在完成了。我希望它在完成后自动被删除为子视图。

我正在查看removeFromSuperview方法,但似乎无法从视图我想要删除的视图控制器中调用它(我的第一直觉是[self.view removeFromSuperview],但是它摆脱了整个查看,而不仅仅是我追求的子视图。

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

提前致谢!

3 个答案:

答案 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;
    }
    

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

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