我已閱讀了類似的問題,但我一直無法解決它。我有一個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