我已经阅读了类似的问题,但我还没有能够解决它。我有一个tableview,它有一个自定义单元格,带有一个按钮来添加和删除一个类。我创建了一个自定义委托来保存和删除类,并更改按钮的状态。更改按钮的状态工作正常,但是当我滚动按钮时,不要保持状态(我猜测是因为我将单元格出列)
在我的单元格中索引路径的行我尝试检查以更改按钮的状态:
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()我的单元格中的所有视图都是零?我只是试图不重复使用单元格作为我的最后解决方案。
答案 0 :(得分: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() {
}
我希望这会有所帮助。
答案 1 :(得分:0)
你应该做两件事
答案 2 :(得分:0)
解决方案来自@Michael"您需要的任何州都必须在小区外维护。因为tableView重用了已经创建的单元格,所以我必须在类中添加一个属性我填充tableview(我使用bool但它可以是任何东西)并且基于该属性我在方法中设置按钮的状态的cellForRowAtIndexPath。