1

我已经阅读了类似的问题,但我无法解决它。我有一个表格视图,它有一个带有按钮的自定义单元格来添加和删除一个类。我创建了一个自定义委托来保存和删除类,并更改按钮的状态。更改按钮的状态可以正常工作,但是当我滚动按钮时不会保持状态(我猜是因为我正在使单元格出列)

在索引路径的行的单元格中,我尝试检查以更改按钮的状态:

let isInSchedule = self.isClassScheduled(classAttend, from: self.classesInSchedule!)
    if isInSchedule == true {
        cell.addRemoveButton.selected = true

    } else {
        cell.addRemoveButton.selected = false
    }

这是我保存或删除类的委托方法

 func indexOfClassSelectedWithButton(index: NSIndexPath, tableView:UITableView, and button: AddRemoveClass) {
    if let currentlySavedClasses = ManagedObjectsController.sharedInstance.getAllScheduledClasses() as? [ClassScheduled] {
    let classSelected = self.classes[index.section]
    switch button.selected {
    case true:
            for classItem in currentlySavedClasses {
                if classSelected.presentation?.title == classItem.presentation?.valueForKey("title") as? String {
                    ManagedObjectsController.sharedInstance.deleteScheduledClass(classItem)
                    button.selected = false
                }
            }
        break
    default:
        if let classSelectedBreakout = classSelected.breakout?.valueForKey("breakoutID") as? String {
            let canSave = self.isBreakoutAvailable(classSelectedBreakout, allClasses: currentlySavedClasses)
            if canSave {
                ManagedObjectsController.sharedInstance.createScheduledClass(from: classSelected)
                button.selected = true
            } else {
                NSNotificationCenter.defaultCenter().postNotificationName(timeConlictNotication, object: nil)
            }
        }
      break
    }
    }
}

它会更改按钮状态,但是当我开始向上或向下滚动时,按钮不会保持状态(我知道可能是因为我正在修改我的单元格,所以它正在占用任何可用的单元格。任何帮助都很大赞赏。

另外,我在故事板的视图控制器中有我的单元格。为什么如果我执行 cell = PresentationCell() 我的单元格中的所有视图都为零?我只是想不重用单元格作为我的最后一个解决方案。

4

3 回答 3

3

可重复使用的表格视图单元格不会保持状态,因此要保持按钮保持其状态,您必须根据您的条件在单元格出现在屏幕上时进行另一次检查。我的建议是实施

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if isInSchedule == true {
    cell.addRemoveButton.selected = true

} else {
    cell.addRemoveButton.selected = false
}

}

另一件事是在自定义单元格中通过实现“prepareForReuse”来记住单元格的重置状态。

override func prepareForReuse() {

}

我希望这会有所帮助。

于 2016-03-10T02:23:32.333 回答
0

你应该做两件事

  1. 覆盖 UITableViewCell 子类中的“prepareForReuse”以将 tableview 单元格重置为默认状态
  2. 在 tableView:cellForRowAtIndexPath: 中将出列一个可重用的单元格。由于该单元格正在被重复使用并且可能已经与不同的 indexPath 相关联,因此您必须重新配置它。在您的情况下,您将设置按钮的状态以反映您将要分配单元格的 indexPath
于 2016-03-10T02:29:07.417 回答
0

解决方案来自@Michael“您需要的任何状态都必须在单元格之外维护”,因为 tableView 重用了已经创建的单元格我必须向类添加一个属性我用填充 tableview (我使用了一个 bool 但它可以是任何东西)并基于该属性,我在方法 cellForRowAtIndexPath 中设置按钮的状态。

于 2016-03-10T04:07:43.957 回答