swift 设置可扩展ViewCell的选定状态

0vvn1miw  于 2023-11-16  发布在  Swift
关注(0)|答案(2)|浏览(113)

我正在使用我的应用程序,当点击1个单元格时,其背景应该变成蓝色,如果点击其他单元格,前一个单元格将重置其背景颜色。这是我的setSelected函数

override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        if selected {
            borderView.applyBorder(color: .darkGray, width: 1)
            borderView.backgroundColor = .blue
        } else {
            borderView.applyBorder(color: .lightGray, width: 1.0)
            borderView.backgroundColor = .white
        }
    }

字符串
但是当我测试它的时候,单元格的背景是蓝色的,如果我点击其他单元格,它们不会重置。

epggiuax

epggiuax1#

抛弃现有的代码。你不能用基于单元格的方式来做这件事;你必须用基于行的方式来做,这意味着你必须通过表内容所依赖的数据模型来实现它。
1.在表视图的委托中,实现表视图委托方法tableView(_:didSelectRowAt:)。在该方法中,更改表视图的 model 中的某些内容,使每行都知道它现在是否被选中,并调用表视图的reloadData,以便它将生成新单元格。
1.在表视图的数据源tableView(_:cellForRowAt:)中,根据该行的 model 中的信息,配置所请求单元格的外观。

shyt4zoc

shyt4zoc2#

在这种情况下,它是一个单一的选择表。我没有看到你的代码设置表视图,所以我想你使用了一个不正确的属性。

//This property is false by default
tableView.allowsMultipleSelection = false

字符串
然后它应该正常工作。并获得选定的行用于其他目的。

//There is a property to get all selected rows. However, it's single selection table, so using this
if let selectedIndexPath = tableView.indexPathForSelectedRow {
    //TODO
}


但是这种方法有一个缺点。当你想默认选择一个单元格时,也就是说,在viewDidLoad上。而不是像@matt在他的回答中所说的那样,只将模型内部的selected属性设置为true。你必须通过方法tableView.selectRow进行设置。这意味着你让table view处理选择状态,而你的模型只是用来显示信息。
x1c 0d1x的数据

相关问题