如何删除子视图(或视图的所有子视图)

时间:2011-05-01 20:33:40

标签: iphone objective-c cocoa-touch uiview

我有一个方法,我分配并初始化

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;

2 个答案:

答案 0 :(得分:14)

由于你的UIView是自动释放的,你只需要从superview中删除它。其中有removeFromSuperview方法。

所以,你只想打电话给[self.tabsView removeFromSuperview]。只要您的财产声明设置为retain,那就是您所需要的一切。

答案 1 :(得分:4)

另一种解决方案:不要删除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