Ios 自定义TableViewCell按钮应切换特定行的活动状态和图标,但也会更改其他不相关行的图标

Ios 自定义TableViewCell按钮应切换特定行的活动状态和图标,但也会更改其他不相关行的图标,ios,uitableview,swift,custom-cell,Ios,Uitableview,Swift,Custom Cell,我需要在包含自定义对象的表视图中切换每个对象的状态(活动/非活动):我只想在该表视图中显示活动对象,因此当对象的状态更改为非活动时,它将从列表中消失 应用程序正在工作(创建新的自定义对象,在表视图中显示它们,在detailView中查看和编辑它们的内容,包括活动/非活动状态…);如果它是相关的,请考虑我的项目使用核心数据< /强>,并且我使用它的方法填充 TabelVIEW//> > 我还需要为tableView单元格定制设计,我已经实现了它(我有UITableViewCell的子类和显示所需

我需要在包含自定义对象的
表视图中切换每个对象的状态(活动/非活动):我只想在该
表视图中显示活动对象,因此当对象的状态更改为非活动时,它将从列表中消失

应用程序正在工作(创建新的自定义对象,在
表视图中显示它们,在detailView中查看和编辑它们的内容,包括活动/非活动状态…);如果它是相关的,请考虑<强>我的项目使用核心数据< /强>,并且我使用它的方法填充 TabelVIEW//> > 

我还需要为
tableView
单元格定制设计,我已经实现了它(我有
UITableViewCell
子类和显示所需内容的自定义单元格),这似乎也可行,但这是我第一次使用自定义单元格,我一定做错了什么

当我点击单元格中的active-inactive按钮更改自定义对象状态时(并使其从列表中消失,因为它已变为非活动状态),我实际上得到了该对象所需的内容(其状态更改,对象从列表中消失)

我的问题是,我还看到其他几行的
ui按钮的图像(当对象处于活动或非活动状态时显示两个不同的图标)变为非活动图标。正常情况下,所有行的按钮图像,除了我刚刚点击并已消失的那一行外,都应该是活动的。
<强> >请考虑,对于其他行,它只是图标错误,实际状态对于尚未点击的每一行都是活动的< /强>:如果我停止应用程序并再次运行,在启动时图标都是正确的,在 TabelVIEW>代码>中,我只看到仍在活动的对象。

我很确定我的问题与'dequeueReusableCellWithIdentifier'有关,但我不知道如何解决这个问题

以下是我的一些方法:

// TableViewController

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as MyCustomTableViewCell

    self.configureCell(cell, atIndexPath: indexPath)

    return cell
}


func configureCell(cell: MyCustomTableViewCell, atIndexPath indexPath: NSIndexPath) {

    let aObject = self.fetchedResultsController.objectAtIndexPath(indexPath) as CustomObject

    cell.customLabel.text = aObject.name
    cell.detailLabel.text = aObject.anotherProperty
    //...

    cell.objectToMarkAsInactive = aObject
}


// MyCustomTableViewCell

//... IBOutlets

var objectToMarkAsInactive : CustomObject?

@IBAction func markObjectAsInactive(sender: AnyObject) {

    activeButton.selected = !activeButton.selected

    objectToMarkAsInactive?.active = !(objectToMarkAsInactive?.active as Bool)

    saveContext()
}


override func awakeFromNib() {
    super.awakeFromNib()

    // UIImage vars

    activeButton.setImage(activeImage, forState: UIControlState.Selected)
    activeButton.setImage(inactiveImage, forState: UIControlState.Normal)
    activeButton.setImage(highlightedImage, forState: UIControlState.Highlighted)
}
我还试图在保存上下文后重新加载
表视图
,但其他行上的图标问题仍然存在

显然,我在TableViewController的configureCell
中设置cell
objectToMarkAsInactive=AOObject的自定义属性的解决方案并不正确,因为这些单元格是重复使用的,但我没有其他想法来实现我想要的,因为单元格的状态更改按钮必须作为iAction连接到MyCustomTableViewCell,而不是TableViewController

我对编程相当陌生,我的问题可能是由我的错误决定引起的,但我真的需要一些建议,我被卡住了

我应该停止使用带有标识符的出列可重用单元
?我不喜欢它,因为我可能会有大量的对象,但是如果我必须使用普通的单元格,我可以在没有deque的情况下为它们定制设计吗?“常规”单元格实例化方法仅显示枚举中普通单元格的几个选项,而不是自定义单元格(
UITableViewCellStyle.

提前感谢,


@cdf1982

您不需要停止使用
dequeueReusableCellWithIdentifier
。问题是单元格被重复使用,但如果只是按钮的图像不正确,请添加检查以查看需要显示的图像

func configureCell(cell: MyCustomTableViewCell, atIndexPath indexPath: NSIndexPath) {

    let aObject = self.fetchedResultsController.objectAtIndexPath(indexPath) as CustomObject

    cell.customLabel.text = aObject.name
    cell.detailLabel.text = aObject.anotherProperty
    //...
    if aObject.isActive { // set button to active }
    else { // set button to inactive }

    cell.objectToMarkAsInactive = aObject
}

非常感谢,这很有效。在实施您的建议(这证明有时我应该停止撞墙,尝试不同的透视图)之前,我彻底检查了唯一的错误是图像,既然如此,我添加了if/else来检查configureCell方法中对象的.active属性,相应地设置按钮的.selected属性。它工作得很好,我真的很感谢你的帮助!没问题!不久前我还在做同样的事情,想弄明白这件事是多么令人沮丧。