NSArrayController更改其选择:捕获此事件的最佳方法是什么?

问题描述 投票:1回答:2

人们可以把观察者放在selectedIndexNSArrayController方法上。我认为这种方法有一些缺点:

  • arrangedObjects被重新排列时会发生什么?我承认这不是一个非常重要的问题
  • 如果我们要求观察者记住selectedIndex的旧值,它就不起作用。众所周知,但我找不到链接。

为什么NSArrayController没有委托?有没有其他方法可以实现我想要做的事情:在选择更改时启动一些方法?

macos cocoa model-view-controller nsarraycontroller
2个回答
5
投票

观察selectionNSArrayController键(它继承自NSObjectController)。

它将返回NSMultipleValuesMarker(当选择了许多对象时),NSNoSelectionMarker(当没有选择任何内容时),或者代表所选对象的代理,然后可以通过self键查询原始对象值。

如果重新排列对象实际上没有改变选择,它将不会改变。

你也可以观察selectedObjects;在这种情况下,您不需要处理标记。


1
投票

在Swift 4中提供hamstergene的出色解决方案。

viewDidLoad,观察关键路径。

arrayController.addObserver(self, forKeyPath: "selectedObjects", options: .new, context: nil)

在视图控制器中,

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    guard let keyPath = keyPath else { return }

    switch keyPath {

    case "selectedObjects":
        // arrayController.selectedObjects has changed

    default:
        break
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.