在我的程序中,如果我将下面的行放在cellForRowAtIndexPath(Tableview)中,滚动就可以了。否则,线路崩溃。我想知道这段代码做了什么?
代码是....
for (UIView *oldViews in cell.contentView.subviews)
{
[oldViews removeFromSuperview];
}
提前致谢
答案 0 :(得分:11)
你必须知道在iOS中你正在操纵“视图”。视图是UI部分(图像,标签,输入等)或包含层。
在发布之初,你必须向你的窗口添加一个视图。然后,您可以在视图中添加所需数量的视图。
如果在视图A上添加视图B.并在窗口上添加视图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的实例。这些代码将删除其所有子视图,因此如果需要重用,则必须重新构建其所有子视图。