如何删除子视图(或视图的所有子视图)
我在我的Alloc的方法和初始化一个如何删除子视图(或视图的所有子视图)
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;
由于您的UIView会被自动释放,你只需要从上海华删除它。对此,有removeFromSuperview
方法。
所以,你只需要拨打[self.tabsView removeFromSuperview]
。只要您的财产声明设置为retain
这就是您所需要的。
谢谢...那么self.tabsView = nil;命令 - 会是错误的还是与removeFromSuperview不同?谢谢你的帮助! – 2011-05-01 20:56:02
'self.tabsView = nil'不会将其从superView中删除。 – cweinberger 2011-05-01 21:05:52
他/她说了什么 - 你不需要将它设置为零,因为只要你正确设置了你的@属性声明,当你重新分配属性时,这将被照顾。 – lxt 2011-05-01 21:30:13
另一种解决方案:不要删除你的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
。
谢谢,但我需要完全删除一些按钮,所以我猜这是行不通的。不过谢谢你的想法。 – 2011-05-01 20:56:36
我在另一个stackoverflow问题中找到了这个答案:http://stackoverflow.com/a/2156046/374873 – apb 2013-01-05 14:52:29