1

我有NSTitlebarAccessoryViewController一个不确定NSProgressIndicator的。我希望能够在我的应用程序的不同位置启动和停止它,有时在视图控制器之外。

我对 OS X 开发相当陌生。我听说在 OS X 中,响应者链比在 iOS 中使用得更多。我已经查看了响应者链以及如何通过 执行此操作NSResponder,但我真的无法理解它。下面是可视化的屏幕截图。

在此处输入图像描述

这是我的标题栏 acc 的代码。视图控制器:

class TitleBarAccessoryViewController: NSTitlebarAccessoryViewController, TitleBarActionable {

@IBOutlet var loadingSpinner: NSProgressIndicator!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do view setup here.
}
func loadingSpinnerShouldBecomeActive(activate: Bool) {
    print("Hello")
    loadingSpinner.hidden = !activate
    if activate {
        loadingSpinner.startAnimation(self)
    } else {
        loadingSpinner.stopAnimation(self)
    }
  }
}

然后我想通过协议扩展来调用它:

extension EmployeeAPI {

    func getAllEmployees(completionHandler: ([FDataSnapshot]) -> Void) {
        let employeeRef = ref.childByAppendingPath("employees")
        //Somehow start the loading indicator here

        employeeRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
            //And somehow stop it here
            var arr: [FDataSnapshot] = []
            for snap in snapshot.children {
                if let snap = snap as? FDataSnapshot {
                    arr.append(snap)
                }
            }
            completionHandler(arr)
        })

我还希望从不同的 viewController 启动和停止它,因此它不限于协议扩展。

4

2 回答 2

1

除了您的问题之外-但响应者链是一种非常常见的设计模式,如果您打算继续从事软件开发,那么这绝对值得一读:

于 2017-10-22T10:42:07.393 回答
0

一个直接解耦的解决方案是使用NSNotification例如“TitleBarAccessoryViewStartSpinnerNotification”和“TitleBarAccessoryViewStopSpinnerNotification”。

于 2016-06-30T18:38:53.697 回答