【问题标题】:KVO: not receiving notifications on NSTableView's -selectedRowIndexes?KVO:没有收到关于 NSTableView 的 -selectedRowIndexes 的通知?
【发布时间】:2012-09-12 16:34:37
【问题描述】:

我正在尝试让 NSTableView 的自定义子类观察其自己的 -selectedRowIndexes 属性的值,但我无法弄清楚如何正确接收通知。我的子类看起来像这样(使用 ARC):

@implementation MyTableView

- (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder])) {
        [self addObserver:self forKeyPath:@"selectedRowIndexes" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:NULL];
    }
    return self;
}

- (void)dealloc {
    [self removeObserver:self forKeyPath:@"selectedRowIndexes"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    NSLog(@"change: %@", change);
}

@end

但是,我从未见过-observeValueForKeyPath:... 被调用。我错过了什么吗?

我也对更好的解决方案持开放态度 - 我想做 KVO 而不是依赖委托的 -tableViewSelectionDidChange: 方法的原因是我想要 selectedRowIndexes 的先前值和当前值,而不仅仅是能够获得当前的选择。如果有办法在此属性上不使用 KVO,我会全力以赴。

【问题讨论】:

    标签: macos cocoa selection nstableview key-value-observing


    【解决方案1】:

    如果您没有看到 KVO 通知,我会在 bugreport.apple.com 上打开一个雷达。原因很可能是它们不完全符合 KVO。我没有测试过,但我不会感到震惊。

    至于如何在没有 KVO 的情况下做到这一点,这相当简单。使用 tableView:willSelectRowAtIndexPath: tableView:shouldSelectRow:。检查当前值和要添加的值。返回YES

    【讨论】:

    • 您能否提供指向-tableView:willSelectRowAtIndexPath: 文档的链接?我在 NSTableView 或 NSTableViewDelegate 上都没有看到它。
    • 对不起;这很尴尬。我没有检查这是 Mac 还是 iOS。固定。
    • 我认为这让我了解了其中的一部分 - 有没有可以用来查看取消选择的等价物?我想对特定行的选择和取消选择执行操作。 (也许-tableView:selectionIndexesForProposedSelection:?)
    • 不确定。您可能必须继承 UITableView 才能获得您想要的所有内容。
    【解决方案2】:

    我遇到了同样的问题,我找到了解决方案:

    将 NSTableView 视图选择索引绑定到数组控制器,键 selectionIndexes

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多