【发布时间】: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 绑定到名为MinimizeModifiers 的User 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