同様の質問を読みましたが、解決できませんでした。クラスを追加および削除するためのボタンを備えたカスタムセルを持つテーブルビューがあります。クラスを保存して削除し、ボタンの状態を変更するカスタム デリゲートを作成しました。ボタンの状態の変更は正常に機能しますが、スクロール中にボタンが状態を保持しません (セルをデキューしているためだと思います)
インデックスパスの行のセルで、ボタンの状態を変更するためにチェックしようとしました:
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
}
}
}
ボタンの状態を変更しますが、上下にスクロールを開始すると、ボタンの状態が保持されません (おそらく、セルを修正しているため、使用可能なセルを取得しているためです。どんな助けも大いに役立ちます感謝。
また、ストーリーボードのView Controller内にセルがあります。cell = PresentationCell() を実行すると、セル内のすべてのビューが nil になるのはなぜですか? 最後の解決策としてセルを再利用しないようにしています。