【问题标题】:UITableView Unintentionally Selecting Multiple CellsUITableView 无意中选择了多个单元格
【发布时间】:2019-04-23 04:31:50
【问题描述】:

我有一个 UITableView,每个部分加载 1 个单元格,以提供间距。当点击一个单元格时,我可以让单元格适当地扩展。问题是其他细胞也会膨胀,我无法确定原因。未实现多选。 GIF 将说明我的问题。我的代码如下。

来自视图控制器的代码

func numberOfSections(in tableView: UITableView) -> Int {
        return searchTextFieldIsEmpty() ? credentials.count : filteredCredentials.count
    }


    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 15 }


    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = UIView()
        view.backgroundColor = .clear
        return view
    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 }



    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CredCell
        cell.delegate = self

        if credentials.isEmpty {
            return cell
        } else {
            tableView.backgroundView = nil
            isFiltering() ? cell.formatCell(filteredCredentials[indexPath.section]) : cell.formatCell(credentials[indexPath.section])
            return cell
        }
    }


    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath) as! CredCell
        cell.detailsView.isHidden = !cell.detailsView.isHidden

        let borderColor = UIColor(red: 206.0/255.0, green: 214.0/255.0, blue: 234.0/255.0, alpha: 1)
        cell.idView.addBorder(side: .bottom, thickness: 2, color: borderColor)
        cell.notificationView.addBorder(side: .bottom, thickness: 2, color: borderColor)
        cell.frontImageView.addBorder(side: .bottom, thickness: 2, color: borderColor)
        cell.backImageView.addBorder(side: .bottom, thickness: 2, color: borderColor)
        cell.notesView.addBorder(side: .bottom, thickness: 2, color: borderColor)
        tableView.beginUpdates()
        tableView.endUpdates()
        tableView.deselectRow(at: indexPath, animated: true)
        tableView.scrollToRow(at: indexPath, at: .none, animated: true)
    }

提前致谢!

使用解决方案编辑 @贾斯汀的建议是导致问题的原因,细胞状态在被重用时仍然存在。我在自定义单元格中添加了以下内容,问题就解决了。

 override func prepareForReuse() {
        self.detailsView.isHidden = true
    }

【问题讨论】:

    标签: swift uitableview


    【解决方案1】:

    您是否正在跟踪单元格是展开还是折叠的状态,并在您的cellForRowAt 中使用它。我的猜测是,当您上下滚动时,它会重复使用单元格,有时它会重复使用您扩展的单元格,因此其他单元格也会扩展。

    【讨论】:

    • 这很有意义。我目前没有跟踪,只是隐藏和取消隐藏详细视图。我会去告诉你的。
    • 这就是问题所在。我已经编辑了我的问题以反映修复它的代码。谢谢!
    【解决方案2】:
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let cell = tableView.cellForRow(at: indexPath) as! CredCell
            cell.tag = indexPath.row
            cell.detailsView.isHidden = !cell.detailsView.isHidden
    
            if cell.tag == indexPath.row {
                let borderColor = UIColor(red: 206.0/255.0, green: 214.0/255.0, blue: 234.0/255.0, alpha: 1)
                cell.idView.addBorder(side: .bottom, thickness: 2, color: borderColor)
                cell.notificationView.addBorder(side: .bottom, thickness: 2, color: borderColor)
                cell.frontImageView.addBorder(side: .bottom, thickness: 2, color: borderColor)
                cell.backImageView.addBorder(side: .bottom, thickness: 2, color: borderColor)
                cell.notesView.addBorder(side: .bottom, thickness: 2, color: borderColor)
                tableView.beginUpdates()
                tableView.endUpdates()
            }
            tableView.deselectRow(at: indexPath, animated: true)
            tableView.scrollToRow(at: indexPath, at: .none, animated: true)
        }
    

    尝试使用此代码,这可能会对您有所帮助,
    Happy Coding....

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多