我已阅读了类似的问题,但我一直无法解决它。我有一个tableview,它有一个自定义单元格和一个按钮来添加和删除一个类。我创建了一个自定义委托来保存和删除类,并更改按钮的状态。改变按钮的状态工作正常,但是当我滚动按钮不保持状态(我猜是因为我正在退出单元格)UITableViewCell不保持自定义按钮的状态
在我的单元格中的行索引路径i试图检查,以改变按钮的状态:
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
}
}
}
它改变了按钮的状态,但是当我开始向上或向下滚动按钮不保持状态(我知道可能是因为我正在修改我的ce所以它会使用任何可用的单元。任何帮助是极大的赞赏。
此外,我在我的视图控制器的故事板内有我的手机。为什么如果我做cell = PresentationCell(),我的单元格中的所有视图都是零?我只是试图不重用细胞作为我的最后一个解决方案。
TableView单元不保持状态。在您滚动时,它将重新使用不再在屏幕上的现有单元格。您需要维护单元格外的状态,并在'tableView:cellForRowAtIndexPath:'中从头开始设置每个单元格。 – Michael
我需要不重用细胞?你是这个意思吗? –
不,你必须重用单元格,因为这就是UITableView的工作原理。由于它们将被重用,因此您需要的任何状态都必须保持在单元之外。 – Michael