如何使用 "Handles Content As Compound Value" 维护 TableView 选择
How to maintain TableView selection with "Handles Content As Compound Value"
我在 NSTableView
上维护选择时遇到问题。我正在使用 xCode 8.3.3 和 Swift 3.1 并为 macOS 构建。
基于单元格的 table 视图是在 IB 中创建的,并且在 table 的第一列中有一个 NSButtonCell
(复选框)。此列绑定到 ModifiersController.arrangedObjects.enabled
。复选框按预期运行,这意味着它可以正确选中和取消选中。
问题是,当我通过单击更改复选框的状态时,所选行变为未选中状态,第一行变为选中状态。无论我更改复选框时选择了哪一行,它始终是第一行被选中。
我希望发生的是 checking/unchecking 该框不应影响选定的行(突出显示)。
ArrayController 名为 'ModifiersController',其 Content Array
绑定到名为 MinimizeModifiers
的 User Defaults Controller
键。 MinimizeModifiers
是具有自定义 Value Transformer
的值字典。因此,我启用了 Handles Content As Compound Value
的复选框
当 Handles Content As Compound Value 为 off(禁用)时,table 中的选择将得到正确维护,但底层代码(绑定到 UserDefaults)不起作用。
当 Handles Content As Compound Value 为 on 时,UI 元素值正确绑定到 UserDefaults,但是, 这就是导致 table 失去当前选择的原因。
所以,问题是:
当启用 将内容作为复合值 处理时,如何保持 table 行选择?
附录
tableView 绑定到 selectionIndexes
并且数组控制器设置为 preserve selection
(我也尝试过关闭 preserve selection
,并关闭 'Avoid empty selection' 打开和关闭 - 没有成功)。
还有一个 link 显示问题的迷你电影(如果允许的话)...
https://www.rgbworld.com/images/Whosebug/selection.m4v
附录2
我已将代码更新为 Xcode 9 和 Swift 4,但问题仍然存在。我相信这个问题可能与我使用 KVO and/or use of backing variables for use with my @objc dynamic var
s
有关
我已经创建了一个 github 存储库以防有人提供帮助。我将为帮助我解决此问题的开发人员增加赏金。
Githib 回购
https://github.com/rgbworld/CompoundTransformer
https://github.com/rgbworld/CompoundTransformer
复选框的动作触发用户默认控制器保存数据。用户默认值的更改会触发 table 视图的刷新。所选行未恢复。
解决方案:在 ModifiersRuleTransformer
.
中实施 isEqual(_:)
更多信息:How to make NSArrayController preservesSelection work for custom object?
我在 NSTableView
上维护选择时遇到问题。我正在使用 xCode 8.3.3 和 Swift 3.1 并为 macOS 构建。
基于单元格的 table 视图是在 IB 中创建的,并且在 table 的第一列中有一个 NSButtonCell
(复选框)。此列绑定到 ModifiersController.arrangedObjects.enabled
。复选框按预期运行,这意味着它可以正确选中和取消选中。
问题是,当我通过单击更改复选框的状态时,所选行变为未选中状态,第一行变为选中状态。无论我更改复选框时选择了哪一行,它始终是第一行被选中。
我希望发生的是 checking/unchecking 该框不应影响选定的行(突出显示)。
ArrayController 名为 'ModifiersController',其 Content Array
绑定到名为 MinimizeModifiers
的 User Defaults Controller
键。 MinimizeModifiers
是具有自定义 Value Transformer
的值字典。因此,我启用了 Handles Content As Compound Value
当 Handles Content As Compound Value 为 off(禁用)时,table 中的选择将得到正确维护,但底层代码(绑定到 UserDefaults)不起作用。
当 Handles Content As Compound Value 为 on 时,UI 元素值正确绑定到 UserDefaults,但是, 这就是导致 table 失去当前选择的原因。
所以,问题是: 当启用 将内容作为复合值 处理时,如何保持 table 行选择?
附录
tableView 绑定到 selectionIndexes
并且数组控制器设置为 preserve selection
(我也尝试过关闭 preserve selection
,并关闭 'Avoid empty selection' 打开和关闭 - 没有成功)。
还有一个 link 显示问题的迷你电影(如果允许的话)... https://www.rgbworld.com/images/Whosebug/selection.m4v
附录2
我已将代码更新为 Xcode 9 和 Swift 4,但问题仍然存在。我相信这个问题可能与我使用 KVO and/or use of backing variables for use with my @objc dynamic var
s
我已经创建了一个 github 存储库以防有人提供帮助。我将为帮助我解决此问题的开发人员增加赏金。
Githib 回购
https://github.com/rgbworld/CompoundTransformer https://github.com/rgbworld/CompoundTransformer
复选框的动作触发用户默认控制器保存数据。用户默认值的更改会触发 table 视图的刷新。所选行未恢复。
解决方案:在 ModifiersRuleTransformer
.
isEqual(_:)
更多信息:How to make NSArrayController preservesSelection work for custom object?