我在NSTableView
上维护选择时遇到问题。我正在使用xCode 8.3.3和Swift 3.1并为macOS构建。
基于单元格的tableView在IB中创建,并在表格的第一列中有一个NSButtonCell
(一个复选框)。此列绑定到ModifiersController.arrangedObjects.enabled
。该复选框按预期运行,这意味着可以正确地检查和取消选中它。
问题在于,当我通过单击更改复选框的状态时,所选行将变为未选中状态,并且第一行将被选中。无论我在更改复选框时选择哪一行,它始终是第一行被选中。
我期望发生的事情是检查/取消选中该框不应影响所选行(突出显示)。
ArrayController名为'ModifiersController',其Content Array
绑定到名为User Defaults Controller
的{{1}}键。 MinimizeModifiers
是带有自定义MinimizeModifiers
的值字典。因此,我启用了将内容处理为复合值
当处理内容为复合值 关闭(禁用)时,表中的选择被正确维护,但底层代码(绑定到UserDefaults)不起作用。
当处理内容为复合值 时,UI元素值已正确绑定到UserDefaults,但是,这似乎会导致表格失去当前的选择。
所以,问题是: 当处理内容为复合值时,如何保持表行选择?
附录
tableView绑定到Value Transformer
,并且数组控制器设置为selectionIndexes
(我也尝试关闭preserve selection
,并且打开和关闭“避免空选择” - 没有成功)。
迷你电影的链接显示问题(如果允许)...... https://www.rgbworld.com/images/stackoverflow/selection.m4v
Addendum2
我已将代码更新为Xcode 9和Swift 4,问题仍然存在。我认为这个问题可能与我使用KVO和/或使用支持变量用于我的preserve selection
我创建了一个github存储库,以防有人可以提供帮助。我将为帮助我解决此问题的开发人员添加赏金。
Githib Repo
https://github.com/rgbworld/CompoundTransformer https://github.com/rgbworld/CompoundTransformer
答案 0 :(得分:1)
复选框的操作会触发用户默认值控制器以保存数据。用户默认值的更改会触发刷新表视图。未恢复所选行。
解决方案:在isEqual(_:)
中实施ModifiersRuleTransformer
。
更多信息:How to make NSArrayController preservesSelection work for custom object?