2017-09-25 28 views
0

我在维护NSTableView上的选择时遇到问题。我正在使用xCode 8.3.3与Swift 3.1并为macOS构建。如何使用“将内容作为复合值处理”来维护TableView选择

基于单元格的tableView是在IB中创建的,并且在表格的第一列中有一个NSButtonCell(复选框)。此列绑定到ModifiersController.arrangedObjects.enabled。该复选框的功能与预期相同,意味着它可以正确检查和取消选中。

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

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

enter image description here

的ArrayController被命名为 'ModifiersController',其Content Array势必名为MinimizeModifiers一个User Defaults Controller关键。 MinimizeModifiers是一个值为Value Transformer的字典。由于这一点,我已启用对复选框手柄内容作为复合值

arraycontroller_bindings

把手内容作为复合值关闭(禁止),在表中选择被适当地维持,但底层代码(绑定到UserDefaults)不起作用。

把手含量复合值,UI元素值正确绑定到UserDefaults,然而,这是什么似乎导致表失去当前选择

所以,问题是: 如何保持表格行选择处理内容作为复合值已启用?

补遗

的的tableView势必selectionIndexes和阵列控制器被设置为preserve selection(I也曾尝试用preserve selection断,并用“避免空选择”无论在关闭 - 没有成功)。

selectionIndexes_bind

arraycontroller_preserve

而且迷你电影显示问题(如果允许的话)的链接... 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

+0

你的表视图,以阵列控制器的结合“选材指标”? 'Preserve Selection'是否打开? – Willeke

+0

@Willeke感谢您的回复。是和是。我已更新问题以显示设置。 – rgbworld

+0

我无法重现此问题,但点击复选框不会触发保存数据。奇怪的是,当我试图找出表视图如何处理选择,我最终在这个问题相同的方法[如何使NSArrayController保留自定义对象的选择工作?](https:// stackoverflow。 COM /问题/ 46233759 /如何对化妆NSArrayController的-preservesselection工作换定制对象)。 – Willeke

回答