簡體   English   中英

UITableViewCell不保持自定義按鈕的狀態

[英]UITableViewCell does not hold the state of custom button

我已經閱讀了類似的問題,但我無法解決它。 我有一個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()我的單元格中的所有視圖都是零? 我只是試圖不重復使用單元格作為我的最后一個解決方案。

可重復使用的表格視圖單元格不保持狀態,以便保持按鈕保持狀態,當單元格出現在屏幕上時,您必須根據條件進行另一次檢查。 我的建議是實施

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. 覆蓋UITableViewCell子類中的“prepareForReuse”,將tableview單元格重置為某個默認狀態
  2. 在tableView:cellForRowAtIndexPath:將dequeu一個可重用的單元格。 由於該單元正在被重用,並且可能已經與不同的indexPath關聯,因此您必須重新配置它。 在您的情況下,您將設置按鈕的狀態以反映您要將單元格分配給的indexPath

解決方案來自@Michael“你需要的任何狀態必須保持在單元格之外”因為tableView重用已經創建的單元格我必須向類添加屬性我填充了tableview(我使用了bool但是它可以是任何東西)並基於該屬性我在方法cellForRowAtIndexPath中設置按鈕的狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM