【问题标题】:How to maintain TableView selection with "Handles Content As Compound Value"如何使用“将内容作为复合值处理”来维护 TableView 选择
【发布时间】:2018-03-06 20:27:36
【问题描述】:

我在维护 NSTableView 上的选择时遇到问题。我正在使用 xCode 8.3.3 和 Swift 3.1 并为 macOS 构建。

基于单元格的 tableView 是在 IB 中创建的,并且在表格的第一列中有一个 NSButtonCell(一个复选框)。此列绑定到ModifiersController.arrangedObjects.enabled。复选框按预期工作,这意味着它可以正确地选中和取消选中。

问题是,当我通过单击它来更改复选框的状态时,选定的行变为未选中状态,而第一行变为选中状态。无论我更改复选框时选择了哪一行,它始终是第一行被选中。

我期望发生的是选中/取消选中该框不应影响所选行(突出显示)。

ArrayController 名为“ModifiersController”,其Content Array 绑定到名为MinimizeModifiersUser Defaults Controller 键。 MinimizeModifiers 是具有自定义 Value Transformer 的值字典。因此,我启用了 Handles Content As Compound Value

复选框

将内容作为复合值处理关闭(禁用)时,表格中的选择得到正确维护,但底层代码(与 UserDefaults 的绑定)不起作用.

将内容作为复合值处理开启时,UI 元素值会正确绑定到 UserDefaults,但是,这似乎会导致表格丢失当前选择

所以,问题是: 启用将内容作为复合值处理时如何维护表格行选择?

附录

tableView 绑定到selectionIndexes,数组控制器设置为preserve selection(我也试过关闭preserve selection,同时开启和关闭“避免空选择” - 没有成功)。

以及显示问题的迷你电影的链接(如果允许)... https://www.rgbworld.com/images/stackoverflow/selection.m4v

附录2

我已将代码更新为 Xcode 9 和 Swift 4,但问题仍然存在。我相信这个问题可能与我对 KVO 的使用和/或与我的@objc dynamic vars 一起使用的支持变量有关

我已经创建了一个 github 存储库,以防有人可以提供帮助。我将为帮助我解决此问题的开发人员添加赏金。

Githib 回购

https://github.com/rgbworld/CompoundTransformer https://github.com/rgbworld/CompoundTransformer

【问题讨论】:

  • 您是否将表视图的“选择索引”绑定到数组控制器? “保留选择”是否已打开?
  • @Willeke 感谢您的回复。是的,是的。我已更新问题以显示设置。
  • 我无法重现此问题,但单击复选框不会触发保存数据。发生了一些奇怪的事情,当我试图找出表格视图如何处理选择时,我最终采用了与这个问题 How to make NSArrayController preservesSelection work for custom object? 相同的方法。
  • @Willeke 我添加了赏金和 github 存储库。希望您可能有兴趣帮助找到解决方案:-)
  • 你尝试过覆盖isEqual(_:)吗?

标签: xcode macos checkbox binding nstableview


【解决方案1】:

复选框的动作触发用户默认控制器保存数据。用户默认值的更改会触发表视图的刷新。所选行未恢复。

解决方案:在ModifiersRuleTransformer 中实现isEqual(_:)

更多信息:How to make NSArrayController preservesSelection work for custom object?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2018-01-28
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多