Swift 中 didSelectRowAt 函数上的 Switch 语句
Posted
技术标签:
【中文标题】Swift 中 didSelectRowAt 函数上的 Switch 语句【英文标题】:Switch Statement on didSelectRowAt Function in Swift 【发布时间】:2021-12-30 10:01:23 【问题描述】:我正在使用表格视图,并且在其单元格中有一个标签。我想要的是在每次点击单元格时更改单元格标签。我知道 switch 语句不适用于 indexPath。我希望我的案例 1 和案例 2 能够正常工作。
这是我的代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let cell = tableView.cellForRow(at: indexPath)
switch Value
case 1:
cell.cellLabel.text = "first time label changes"
case 2:
cell.cellLabel.text = "second time label changes"
default:
cell.cellLabel.text = "change the label"
有没有人有一个解决方案,如果我第一次点击一个单元格,案例 1 应该工作,如果我再次点击它,案例 2 应该工作?
【问题讨论】:
基本上修改cellForRow
之外的单元格是个坏主意,因为这些更改不是持久的。
澄清这一点:您误解了indexPath
是什么。它是单元格在列表中的位置,与交互无关,所以如果您选择单元格,它自然不会改变。在 TableView 中,IndexPath 由 row
和 section
组成,用于对您的内容进行分组
【参考方案1】:
试试我的代码
var count = 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
count += 1
let cell = tableView.cellForRow(at: indexPath)
switch count
case 1:
cell.cellLabel.text = "first time label changes"
case 2:
cell.cellLabel.text = "second time label changes"
default:
cell.cellLabel.text = "change the label"
如果你在触摸它 3 次时需要“第一”
var count = 0
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
count += 1
if count > 2
count = 1
let cell = tableView.cellForRow(at: indexPath)
switch count
case 1:
cell.cellLabel.text = "first time label changes"
case 2:
cell.cellLabel.text = "second time label changes"
default:
cell.cellLabel.text = "change the label"
【讨论】:
这行得通。谢谢!你拯救了我的一天。 我在案例 2 上计数为 0。因此,当案例 2 工作时,计数变为 0。 @TaimoorArif 是的,祝你好运【参考方案2】:var selectedRows = [Int]()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
selectedRows.append(indexPath.row)
print(selectedRows)
self.tableView.reloadData()
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
if let index = selectedRows.firstIndex(of: indexPath.row)
selectedRows.remove(at: index)
print(selectedRows)
self.tableView.reloadData()
if selectedRows.isEmpty
class TableViewCell: UITableViewCell
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
if (selected)
print("selected")
selectImage.image = UIImage(named:"secondImage")
else
selectImage.image = UIImage(named:"secondImage")
如果您需要多选,请写tableView.allowMultipleSelection = true
【讨论】:
以上是关于Swift 中 didSelectRowAt 函数上的 Switch 语句的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4:没有调用 didSelectRowAt 委托
Swift 3 中的“didSelectRowAt indexPath”问题
Xcode 8 / Swift 3:didSelectRowAt 与 didSelectRowAtIndexPath
Swift - didSelectRowAt indexPath 下一个 VC 没有出现/没有故事板/