首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TableView AccessoryType复选标记置乱

TableView AccessoryType复选标记置乱
EN

Stack Overflow用户
提问于 2017-05-18 02:01:58
回答 3查看 86关注 0票数 0

我的tableView中有两个部分,multipleSelection为真。如果我选择了第一部分中的第一个单元格,然后向下滚动,那么第二部分的第一个单元格就已经被选中了,并且在某个随机滚动中被打乱了。

另外,我没有任何用cellForRowAt编写的代码来标记checkmark

代码语言:javascript
运行
复制
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
    }
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        tableView.cellForRow(at: indexPath)?.accessoryType = .none
}
EN

回答 3

Stack Overflow用户

发布于 2017-05-18 03:11:27

我假设您使用dequeueReusableCell(withIdentifier:)cellForRow(at:)中获取单元格,假设最初TableView中有10个可见单元格。如果现在向上滚动,并为下一个单元格调用cellForRow(at:),则会创建一个新单元格(因为回收池为空),并将其添加到TableView的底部。一旦顶部的单元格从屏幕上消失,它将被添加到回收池中。如果你知道再往上滚动,那么就会再次调用cellForRow(at:),并且在ti的一侧调用dequeueReusableCell(withIdentifier:)。但现在不是创建一个新的单元,而是将下一个单元从回收池中取出,并将该单元添加到底部。如果您不更改属性的值,它将保留将其添加到回收池之前的值。您应该将UITableViewCell子类的prepareForReuse()中的单元格重置为默认值,或者选中并设置cellForRow(at:)中的所有值

票数 1
EN

Stack Overflow用户

发布于 2017-05-18 10:54:36

您可以尝试新的UITableViewCell类,添加一个新的变量,例如var isSelect: Bool = false。你可以在func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell判断isSelect的值做相应的显示处理,当你选择tableView时,修改这个单元格的isSelectreloadData()。对不起,我的英语不好,表达可能不清楚。

票数 0
EN

Stack Overflow用户

发布于 2017-05-18 11:07:54

将被tableview.You重用的单元格应该使用数组模型或字典模型来标记选定的状态。如下所示:

代码语言:javascript
运行
复制
 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
      selectedArray[indexPath.row] = true 
      tableView.reload()
}

 func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
      selectedArray[indexPath.row] = false
      tableView.reload()
}

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //init cell
     let selected = selectedArray[indexPath.row]
     cell.accessoryType =  selected ? .checkmark : .none
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44031923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档