gpt4 book ai didi

ios - 选中时展开 tableviewcell,取消选中时展开 tableviewcell Swift 3

转载 作者:行者123 更新时间:2023-11-28 07:57:06 24 4
gpt4 key购买 nike

所以我有一个 ExpyTableView 类型的 mainTableView ( https://github.com/okhanokbay/ExpyTableView )。一切都很好,我设法实现了它并使其工作,但正如下面的 gif 中所示,我需要为 DidSelect 和 DidDeselect 进行 +1 额外操作。

demo gif

我想要的是当被选中时用绿色突出显示并立即展开其他行,当点击它时立即取消选择并使该行恢复正常。所以通常这需要在屏幕上点击 2 次后发生...而不是我在 gif 中看到 4。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//MARK : Print
print("Selected Section \(indexPath.section), Row : \(indexPath.row)")
///////////////

if let cell = tableView.cellForRow(at: indexPath) {
if (indexPath.section == 1) || (indexPath.section == 2) || (indexPath.section == 3) {
cell.layer.borderWidth = 2.0
cell.layer.borderColor = Theme.defaultColor().cgColor
cell.layer.shadowOffset = CGSize.init(width: 0.5, height: 0.5)
}
}
}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath) {
tableView.deselectRow(at: indexPath, animated: false)
cell.layer.borderWidth = 0.1
cell.layer.borderColor = UIColor.lightGray.cgColor

}
}

我哪里出错了?

最佳答案

基本上,您会监听 didDeselectRow 的表更改,这意味着以下内容:一旦取消选择 TableView 单元格,就会执行代码。因此,除非您真的需要它,否则您可以忘记该代码。然而,您所做的是您选择该行两次。一是扩张,二是崩溃。

你需要做的是记住所选单元格的索引,然后在 id didSelectRowAt 时取消选择它因此,声明一个属性 fileprivate var currentlySelectedCellIndexPath: IndexPath? 然后在 didSelectRowAt 中使用以下内容。

var currentlySelectedCellIndexPath: IndexPath?

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let currentlySelectedCellIndexPath = currentlySelectedCellIndexPath {
// unselect the selected one
makeCellUnSelected(in: tableView, on: currentlySelectedCellIndexPath)
guard currentlySelectedCellIndexPath != indexPath else {
tableView.deselectRow(at: currentlySelectedCellIndexPath , animated: true)
self.currentlySelectedCellIndexPath = nil
return
}
}

// Highlight the proper cell
makeCellSelected(in: tableView, on: indexPath)
currentlySelectedCellIndexPath = indexPath
}

func makeCellSelected(in tableView: UITableView, on indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath) {
if (indexPath.section == 1) || (indexPath.section == 2) || (indexPath.section == 3) {
cell.layer.borderWidth = 2.0
cell.layer.borderColor = Theme.defaultColor().cgColor
cell.layer.shadowOffset = CGSize.init(width: 0.5, height: 0.5)
}
}
}

func makeCellUnSelected(in tableView: UITableView, on indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath) {
cell.layer.borderWidth = 0.1
cell.layer.borderColor = UIColor.lightGray.cgColor
}
}

解释它的作用:函数 makeCellselected 和 makeCellUnselected 只是应用样式更改来突出显示/取消突出显示单元格,就像您之前所做的那样。

在函数 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 中,只检查当前可见和选定的单元格。如果它是同一个单元格,则在 guard 中将其折叠并返回,因为您只需要展开/折叠。如果不是同一个单元格,则只需调用 makeCellUnselected 放弃选择并选择新的单元格。到目前为止,这应该可以解决您的问题。如果您有任何其他问题,请告诉我。

关于ios - 选中时展开 tableviewcell,取消选中时展开 tableviewcell Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47753294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com