Swift 更新cellForRowAtIndexPath中的单元格不';行不通

Swift 更新cellForRowAtIndexPath中的单元格不';行不通,swift,swift2,Swift,Swift2,我有一个UITableView,它允许我在选择父行时拥有子行,以便它展开 这是我的父行: 如果我选择该行,它将展开: 我想让子行元素缩进一点,这样看起来下面的项目就是子行 在我的UITableViewCell中,我在设置单元格的图标和标题时添加了以下代码: func setData(data: ExpandableCell,indexPath : NSIndexPath) { self.itemImg.image = UIImage(named: data.icon

我有一个
UITableView
,它允许我在选择父行时拥有子行,以便它展开

这是我的父行:

如果我选择该行,它将展开:

我想让子行元素缩进一点,这样看起来下面的项目就是子行

在我的
UITableViewCell
中,我在设置单元格的图标和标题时添加了以下代码:

func setData(data: ExpandableCell,indexPath : NSIndexPath)
    {

        self.itemImg.image = UIImage(named: data.icon)
        self.itemTitle.text = data.title

        if(!data.isParent){

            // indent views
            self.itemImg.frame.origin.x = 53
            self.itemTitle.frame.origin.x = 85
        }

        if(data.childs.count == 0){

            // remove the expand - collpase icon when its child row
            self.expandImg.removeFromSuperview()
        }

    }
我遇到的问题是,第一次显示子行时,它没有缩进图标和标签。它一直工作到第二次:

第一次显示子行时(不起作用):

第二次显示子行(这次有效!


我是否必须设置一些东西使其始终有效?我已经这样做了:
SetNeedDisplay()
但是我的行为是相同的。

问题是您的逻辑不完整:

    if(!data.isParent){

很好,但是如果
data.isParent
是真的呢?你不说该怎么办。记住,细胞是重复使用的。您需要准备清空已填充的单元格并重新配置它。

我刚刚解决了这个问题,但仍然有相同的行为。有任何线索@matt吗?我必须找到其他解决方案,我所做的是在单元格中添加其他两个元素,一个用于缩进子行的图像和一个用于缩进子行的标签,然后在其父行时隐藏缩进,并在其子行时显示缩进。现在它似乎起作用了。。。这真是一个很奇怪的问题。这对我来说没有意义。我这样做了:如果(!data.isParent){//child indent views self.itemImg.frame.origin.x=53 self.itemTitle.frame.origin.x=85}else{//普通缩进视图self.itemmg.frame.origin.x=20 self.itemtTitle.frame.origin.x=53}听起来不错。但我对你的代码了解不够,不知道你是否在每次通过
cellforrowatinexpath
…时都在这样做,我也不知道你是如何实现“它扩展的”…还有,我如何知道
数据.isParent
具有正确的值?您如何知道它具有正确的值?基本上我不明白的是,您拥有世界上最伟大的调试器。为什么不调试?您可以确切地看到这些值是否以及如何设置,以及为什么设置。