【问题标题】:How does NSTableView modify the selection of NSArrayController via bindings?NSTableView 如何通过绑定修改 NSArrayController 的选择?
【发布时间】:2010-01-18 09:31:36
【问题描述】:

假设我有以下情况:

当我在 NSTableView 中选择不同的行时,它会神奇地更新 NSArrayController (PersonController) 选择。 NSTableView 是如何做到这一点的?它会做这样的事情吗:

- (void)bind:(NSString *)binding toObject:(id)observableController withKeyPath:(NSString *)keyPath options:(NSDictionary *)options;
{
 if([observableController isKindOfClass:[NSArrayController class]]){
  // got the NSArrayController, which can be used to change selection
 } else {
  // not an NSArrayController, don't try to change selection
 }

 //...
}

我问是因为我正在实现自己的可绑定 NSControl,并且我希望它能够像 NSTableView 一样修改绑定的 NSArrayController 的选择。

【问题讨论】:

    标签: objective-c cocoa cocoa-bindings nstableview nsarraycontroller


    【解决方案1】:

    凭直觉,我在NSTableView 和NSTableColumn 对象上覆盖了bind:toObject:withKeyPath:options:,并让它们记录了它们的绑定。这是输出:

    绑定 NSTableColumn["Last Name"].value 到 NSArrayController 的键路径 "arrangedObjects.lastName": 0x215fc0
    将 NSTable.content 绑定到 NSArrayController 的关键路径“arrangedObjects”:0x215fc0
    将 NSTable.selectionIndexes 绑定到 NSArrayController 的关键路径“selectionIndexes”:0x215fc0
    将 NSTable.sortDescriptors 绑定到 NSArrayController 的键路径“sortDescriptors”:0x215fc0
    将 NSTableColumn["First Name"].value 绑定到 NSArrayController 的键路径 "arrangedObjects.firstName": 0x215fc0

    尽管我所做的唯一绑定是对 NSTableColumn 对象的“值”,但看起来 IB 正在自动添加额外的绑定。 NSTableView 能够修改 NSArrayController 选择,因为它在 IB 中自动绑定 selectionIndexes。

    NSTableView Bindings Reference 确认了这一点,selectionIndexes 和 sortDescriptors。

    【讨论】:

    • 非常感谢这项侦探工作!努力编写这些覆盖将是痛苦的。你的工作对我帮助很大,我不知道为什么有人认为这个答案没那么有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多