如何使用“将内容作为复合值处理”来维护TableView选择
我在维护NSTableView
上的选择时遇到问题。我正在使用xCode 8.3.3与Swift 3.1并为macOS构建。如何使用“将内容作为复合值处理”来维护TableView选择
基于单元格的tableView是在IB中创建的,并且在表格的第一列中有一个NSButtonCell
(复选框)。此列绑定到ModifiersController.arrangedObjects.enabled
。该复选框的功能与预期相同,意味着它可以正确检查和取消选中。
问题是,当我通过单击它来更改复选框的状态时,所选行变为未选中状态,并且第一行变为被选中状态。无论在更改复选框时选择哪一行,它始终是选中的第一行。
我希望发生的是检查/取消选中该框不应该影响选定的行(突出显示)。
的ArrayController被命名为 'ModifiersController',其Content Array
势必名为MinimizeModifiers
一个User Defaults Controller
关键。 MinimizeModifiers
是一个值为Value Transformer
的字典。由于这一点,我已启用对复选框手柄内容作为复合值
当把手内容作为复合值被关闭(禁止),在表中选择被适当地维持,但底层代码(绑定到UserDefaults)不起作用。
当把手含量复合值是上,UI元素值正确绑定到UserDefaults,然而,这是什么似乎导致表失去当前选择。
所以,问题是: 如何保持表格行选择处理内容作为复合值已启用?
补遗
的的tableView势必selectionIndexes
和阵列控制器被设置为preserve selection
(I也曾尝试用preserve selection
断,并用“避免空选择”无论在关闭 - 没有成功)。
而且迷你电影显示问题(如果允许的话)的链接... https://www.rgbworld.com/images/stackoverflow/selection.m4v
Addendum2
我已经更新了代码的Xcode 9和Swift 4,问题依然存在。我相信这个问题可能与我使用KVO和/或使用支持变量用于我的@objc dynamic var
s
我创建了一个github存储库,以防有人可以帮忙。我将为帮助我解决此问题的开发者添加一笔赏金。
Githib回购
https://github.com/rgbworld/CompoundTransformer https://github.com/rgbworld/CompoundTransformer
的复选框的操作触发的用户默认控制器保存数据。用户默认值的更改会触发表视图的刷新。所选行不会被恢复。
解决方案:执行isEqual(_:)
在ModifiersRuleTransformer
。
更多信息:How to make NSArrayController preservesSelection work for custom object?
你的表视图,以阵列控制器的结合“选材指标”? 'Preserve Selection'是否打开? – Willeke
@Willeke感谢您的回复。是和是。我已更新问题以显示设置。 – rgbworld
我无法重现此问题,但点击复选框不会触发保存数据。奇怪的是,当我试图找出表视图如何处理选择,我最终在这个问题相同的方法[如何使NSArrayController保留自定义对象的选择工作?](https:// stackoverflow。 COM /问题/ 46233759 /如何对化妆NSArrayController的-preservesselection工作换定制对象)。 – Willeke