从 UITableViewCell 中删除除 imageView 之外的所有子视图

Posted

技术标签:

【中文标题】从 UITableViewCell 中删除除 imageView 之外的所有子视图【英文标题】:Removing all subviews from a UITableViewCell except imageView 【发布时间】:2015-04-25 23:23:33 【问题描述】:

我正在创建一个自定义单元格,并且主要为文本添加子视图。起初,当单元格被重用时,子视图没有被删除,所以文本会被覆盖并且非常糟糕。然后我将这个 for 循环添加到函数中,它解决了我的问题,除了它还完全删除了我的 imageView 并且它永远不会重新添加,所以我的整个 tableview 缺少应该与每个单元格关联的图像。

if 语句不起作用,但我没有像对单元格标签那样明确使用 cell.addSubView(),所以我想知道这是否与它有关。我用谷歌搜索,发现大多数人都说这对他们有用,但我似乎无法弄清楚。

为什么这会删除我的图像,为什么它们不像其他子视图那样打包,我该如何解决这个问题?

我有以下代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell
    for subView in cell.subviews   
        if subView as? NSObject != cell.imageView 
            subView.removeFromSuperview()
        
    
    var statusImage = UIImage(named:imageConfigration(indexPath.row))!
    cell.imageView?.image = statusImage
    // ...

【问题讨论】:

您可能正在删除单元格的 contentView。尝试使用 cell.contentView 进行 for 循环 如果您创建了一个自定义单元格,您应该将其子类化并在单元格的 init 方法中添加您的子视图。如果你这样做了,那么你就不必担心在重复使用单元格时将它们删除。 【参考方案1】:

在情节提要或 xib 中或以编程方式为您的 imageView 添加标签。现在在子视图的 for 循环中检查子视图的标签是否等于 imageview 的标签,不要删除它。

如果它符合您的要求,解决此问题的另一种选择是隐藏除 imageview 之外添加到单元格的所有元素。这将比在子视图中循环并删除它要快得多,你永远不知道所有子视图都附加到单元格上,而不是你由 ios 添加的,但如果它符合你的要求的话。如有任何疑问,请告诉我

你可以这样做

cell.textLabel.hidden = YES;

【讨论】:

以上是关于从 UITableViewCell 中删除除 imageView 之外的所有子视图的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UITableViewCell 中删除按钮?

从 UITableView 中删除 UITableViewCell

如何从 swift 中的按钮选项中删除 uitableviewcell?

从 UITableViewCell 内的 UITextField 中删除 Tap 手势

如何从 UITableViewCell 中的自定义 UIButton 中删除触摸延迟

从 UITableViewCell 的附件视图中删除视图不起作用