在iPhone中使用removeFromSuperView有什么用?

时间:2010-10-07 13:41:48

标签: iphone uiview

在我的程序中,如果我将下面的行放在cellForRowAtIndexPath(Tableview)中,滚动就可以了。否则,线路崩溃。我想知道这段代码做了什么?

代码是....

for (UIView *oldViews in cell.contentView.subviews)
{
    [oldViews removeFromSuperview];
}

提前致谢

4 个答案:

答案 0 :(得分:11)

你必须知道在iOS中你正在操纵“视图”。视图是UI部分(图像,标签,输入等)或包含层。

在发布之初,你必须向你的窗口添加一个视图。然后,您可以在视图中添加所需数量的视图。

如果在视图A上添加视图B.并在窗口上添加视图A.

语义是:

  • 查看A是B
  • 的超级视图
  • 查看B是A
  • 的子视图
  • 视图A是窗口的子视图
  • 窗口是视图A的超级视图

    因此,如果您在B上调用removeFromSuperview,则将B移除到A(并显示)。

请注意:

添加子视图(addSubview :)时,会对添加的视图执行保留。

删除视图(removeFromSuperview:或removeSubviewAtIndex :)时,会对删除的视图执行发布。

回答你的初步问题

for (UIView *oldViews in cell.contentView.subviews)
{
    [oldViews removeFromSuperview];
}

对每个cell.contentView子视图执行removeFromSuperview方法。 因此,旧的视图将从屏幕中删除,但不需要取消分配(它们将被释放,因此retainCount - 1)。

答案 1 :(得分:0)

然后很简单

删除了“cell.contentView.subviews”中的每个UIView(因此是cell.contentView的子视图)。

它将从superview中删除它们,如果retainCount为0,则可能调用dealloc方法。

答案 2 :(得分:0)

它只是从cell.contentView中删除所有子视图。

答案 3 :(得分:0)

每个UIView类或子类都可以通过addSubView:维护他的视图层次结构,这些代码将从cell.contentView中删除所有子视图。

但是dequeueReusableWithIdentifier:经常重用UITableViewCell的实例。这些代码将删除其所有子视图,因此如果需要重用,则必须重新构建其所有子视图。