从其他类中删除超级视图中的视图

时间:2014-11-27 12:09:39

标签: ios objective-c iphone ipad uiviewcontroller

您好我有三个视图控制器。 A,B,C首先我在A下添加B然后在B下添加B.在C视图控制器中当单击按钮后可见C时我想从超视图中删除C而从其超级视图中删除B.从中删除C B我正在使用以下代码

[self.view removeFromSuperview];

我可以点击按钮从B中删除C.但是如何从C ViewController类中删除A中的B.因此,在C视图控制器中单击按钮后,B,C必须移除&只有A应该可见。

提前致谢。

3 个答案:

答案 0 :(得分:2)

UIView有一个属性superview,因此您可以致电。

[self.view.superview removeFromSuperview];

请务必阅读文档:UIView

编辑:请记住,由于视图C是视图B的子视图,此代码将从A中删除C和B.

答案 1 :(得分:0)

你需要在C和B或C和A之间存在某种依赖关系。简而言之,C需要告知B它应该从它的超级视图中删除它或A它应该删除它的子视图B.

您可以通过协议或通知来实现此目的

答案 2 :(得分:0)

你应该使用代表。 C是父项为B的视图,因此更正确的是B是关闭C的视图,而B,A必须是关闭B的视图。

为了做到这一点,你必须在C中实现协议,在B中实现其他协议,如下所示:

@protocol ViewControllerCDelegate <NSObject>

    - (void)didSelectCloseViewC;

@end

视图B必须实现此协议,并且在此方法中您必须关闭视图C.像这样:

- (void)didSelectCloseViewC {
       [self.viewC removeFromSuperView];
}

你必须用视图B和A重复这个过程,视图B将有它的协议,视图A将实现它。所以在之前的方法didSelectCloseViewC中你最终会得到这个:

- (void)didSelectCloseViewC {
       [self.viewC removeFromSuperView];
       [self.delegate didSelecCloseViewB];
}

在视图A中,您将实现如下的视图B协议:

- (void)didSelectCloseViewB {
       [self.viewB removeFromSuperView];
}