【发布时间】:2016-03-10 01:16:33
【问题描述】:
我已经阅读了类似的问题,但我无法解决它。我有一个表格视图,它有一个带有按钮的自定义单元格来添加和删除一个类。我创建了一个自定义委托来保存和删除类,并更改按钮的状态。更改按钮的状态可以正常工作,但是当我滚动按钮时不会保持状态(我猜是因为我正在使单元格出列)
在我的单元格中的索引路径行中,我尝试检查以更改按钮的状态:
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() 我的单元格中的所有视图都为零?我只是想不重用单元格作为我最后的解决方案。
【问题讨论】:
-
TableView 单元格不保持状态。当您滚动时,它将重用不再出现在屏幕上的现有单元格。您需要在单元格外部维护状态,并在
tableView:cellForRowAtIndexPath:中从头开始设置每个单元格。 -
我不需要重复使用单元格?你是这个意思吗?
-
不,您必须重复使用单元格,因为这就是 UITableView 的工作方式。由于它们将被重复使用,因此您需要的任何状态都必须在单元格之外维护。
-
谢谢!诀窍是像你说的那样,保持单元格外按钮的状态。我向填充单元格的对象添加了一个布尔属性,并基于该属性设置按钮的状态。再次感谢您
标签: ios swift uitableview uibutton uicontrolstate