向下滚动表视图时,未选中的单元格显示为选中状态使用 dequeueReusableCell

问题描述

我遇到了以下问题,我认为这与我在实现 tableView.dequeueReusableCell 以及如何重用单元格时遗漏的某些内容有关。

预期行为:

  1. 选择一个单元格,单元格应变为绿色
  2. 向下滚动
  3. 向上滚动,所选单元格仍为绿色
  4. 向下滚动,任何未选中的单元格不应为绿色

问题:向下滚动时,未选中的单元格是绿色的(就好像它们已被选中一样)。以下示例显示了第 7 步和最后一步中的问题。

Example

以下是我的相关代码

func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                
        // Get a cell
        let cell = tableView.dequeueReusableCell(withIdentifier: "InstructionCell",for: indexPath) as! InstructionCell
        
        // Get the instruction that the tableView is asking about
        let instructionLabel = cell.instructionLabel
        
        if instructionLabel != nil {
            
            let currentArrayOne = arrayOne[currentArrayOneIndex!]
            
            if currentArrayOne.instructions != nil && indexPath.row < currentArrayOne.instructions!.count {
                // Set the instruction text for the instructionLabel
                instructionLabel!.text = currentArrayOne.instructions![indexPath.row]
            }
        }

        // Return the cell
        return cell

    }

    func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
        
        let topInstruction = arrayOne[currentArrayOneIndex!].instructions![topInstructionIndex]
        print(topInstructionIndex)
        print(arrayOne[currentArrayOneIndex!].instructions!.count)
        
        // Check if it is the last instruction
        if topInstructionIndex < arrayOne[currentArrayOneIndex!].instructions!.count - 1 {
            
            // Change cell colour to green
            let tappedInstruction = tableView.cellForRow(at: indexPath)
            tappedInstruction?.contentView.backgroundColor =  #colorLiteral(red: 0.3411764801,green: 0.6235294342,blue: 0.1686274558,alpha: 1)
            
            topInstructionIndex += 1
            
            // Scroll to the next instruction
            let nextInstruction = IndexPath(row: topInstructionIndex,section: 0)
            tableView.scrollToRow(at: nextInstruction,at: UITableView.ScrollPosition.top,animated: true)
            return
            
        } else {
            // Show the lastInstruction dialog Box
            if lastInstructionDialog != nil {
                
                present(lastInstructionDialog!,animated: true,completion: nil)
            }
            
            // Finish the instructions
            print("This is the last instruction.")
            return
        }

    }

我想在我的自定义 InstructionCell 类中添加 override func prepareForReuse(),但这也会重置那些实际被选中的单元格。我需要选定的单元格保持选中状态(更改为绿色)。

关于我可以改变什么的任何想法:

  1. 当滚动进/出视图时,所选单元格保持所选单元格的更改(变为绿色)
  2. 未选中的单元格在滚动到视图中时不会显示为选中状态

非常感谢任何指导!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)