如何删除子视图(或视图的所有子视图)
Posted
技术标签:
【中文标题】如何删除子视图(或视图的所有子视图)【英文标题】:How to remove a subview (or all subviews of a view) 【发布时间】:2011-05-01 20:33:39 【问题描述】:我有一个方法,我在其中分配和初始化一个
UIView (`tabsClippedView = [[[UIView alloc] initWithFrame:tabsClippedFrame] autorelease];`).
这个视图添加了另一个视图
(`tabsView = [[[UIView alloc] initWithFrame:tabsFrame] autorelease];`).
然后我启动几个按钮
(e.g. `UIButton* btn = [[[UIButton alloc] initWithFrame:frame] autorelease];`)
并将它们添加到视图的子视图中。
现在,我有时需要删除所有按钮并重新分配它们。是删除整个视图的最佳方式还是删除我添加按钮的子视图?
我需要怎么做(没有内存泄漏等)? 会不会很简单
self.tabsView = nil;
是否足以删除视图及其所有子视图(即按钮)?
或者最好也删除超级视图,完全从头开始:
self.tabsClippedView = nil;
【问题讨论】:
我在另一个 *** 问题中找到了答案:***.com/a/2156046/374873 【参考方案1】:由于您的 UIView 是自动释放的,您只需将其从超级视图中删除即可。有removeFromSuperview
方法。
所以,您只需致电[self.tabsView removeFromSuperview]
。只要您的属性声明设置为retain
,这就是您所需要的。
【讨论】:
谢谢... 那么 self.tabsView = nil;命令——这会是错误的还是与 removeFromSuperview 不同?感谢您的帮助!self.tabsView = nil
不会将其从 superView 中删除。
他/她所说的 - 您不需要将其设置为 nil,因为只要您正确设置了 @property 声明,这将在您重新分配属性时得到处理.【参考方案2】:
另一种解决方案:不要删除您的 UIButtons
,而是重新使用它们。不知道您的确切用例,但您可以将 tags
分配给您的 UIButtons
并使用 [UIView viewWithTag:]
找到它们。
UIButton* btn = [[UIButton alloc] initWithFrame:frame];
btn.tag = 42; // some unique identifier for the button.. dont use 0 (zero)
[tabsView addSubview:btn];
[btn release];
稍后...
UIButton* btn = (UIButton*)[tabsView viewWithTag:42];
if(btn && [btn isKindOfClass:[UIButton class]])
// do some stuff with btn
另外:在我看来,只有在别无选择时才应该使用autorelease
。将btn
添加为子视图后,在这里很容易释放。
【讨论】:
谢谢,但我需要完全删除一些按钮,所以我想这行不通。不过,感谢您的想法。以上是关于如何删除子视图(或视图的所有子视图)的主要内容,如果未能解决你的问题,请参考以下文章