2012-07-06 49 views
3

我有两个UIViews,UIView1和UIView2。被添加UIView2作为一个子视图到UIView1,我想知道的是,如果我叫从superview中删除UIView

[UIView1 removeFromSuperview]; 

剂量也适用于UIView2的removeFromSuperView?或者我特别要调用的UIView2以及...

任何帮助,将不胜感激

回答

5
UIView---->UIView1------>UIView2 

假设你要删除的UIView1 UIView2,只是你可以编写

[UIView2 removeFromSuperView]. 

假设你想去除的UIView UIView1,就可以像

[UIView1 removeFromSuperView].

在这种情况下,UIView2也被删除。因为当你删除任何视图时,视图的所有子视图都将被删除。

+0

什么应该我做如果我想删除UIView1,并不想删除UIView2? – 2012-07-06 05:17:41

+0

不保留UIView1不能保留UIView2。但我们可以通过另一种方式解决在移除UIView1之前,您必须保存UIView2并将此视图发送到UIView。 – 2012-07-06 05:24:31

+1

当您删除View1时,View2也会被删除,因为:(A)我们假设View1未被保留在其他任何地方,被释放,因此释放其所有子项;或者:(B)当父视图设置为零时,UIView会自动删除所有子项?哪一个? (我一直认为A,但现在我不太确定...) – 2012-07-06 05:48:59

4

无需调用[UIView2 removeFromSuperView],因为当你删除UIView1它也将删除所有子视图。

希望这会有所帮助。

1

如果您认为所有的UIButtons,UILabels和其他控件都是从UIView继承而来的,并且您没有明确地将它们从视图中移除,则很明显从superview移除父视图也会导致删除所有子视图。

因此,你不需要调用[UIView2 removeFromSuperview]

1

你做UIView2添加为UIView1的子视图。所以,如果你打电话[UIView1 removeFromSuperview];意味着什么你添加它,并且UIView1从超级视图中删除。所以不需要调用[UIView2 removeFromSuperView];

1

removeFromSuperView:将接收者从其超级视图及其窗口中取消链接,并将其从响应者链中删除。

如果接收者的超级视图不为零,超级视图释放接收者。如果您打算重新使用视图,请确保在调用此方法之前保留该视图,并在适当时候再次释放它。

这里[UIView2 removeFromSuperView]将从UIView1

删除UIView2

而且[UIView1 removeFromSuperView]会从它的父删除其所有子视图(可能是窗口或另一个视图)

1

更好,你必须像

UIView * main=[[[UIView alloc] initWithFrame:CGRectMake(20, 20, 20, 20)]autorelease]; 
[self.view addsubview main]; 
[main addsubview UIView1]; 
[main addsubview UIView2]; 
创建MAINVIEW

那么你打电话

[UIView1 removeFromSuperview];