如何在不同类别的附件标题栏视图控制器中激活微调器?

时间:2016-06-30 14:14:19

标签: macos cocoa appkit nstitlebaraccessoryviewcontroller

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

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

enter image description here

以下是我的标题栏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)
        })

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

2 个答案:

答案 0 :(得分:1)

除了你的问题之外 - 响应者链是一个非常普遍的design pattern如果你计划在软件开发中坚持下去,这绝对值得一读:< / p>

答案 1 :(得分:0)

解耦的直接解决方案是使用NSNotification与... &#34; TitleBarAccessoryViewStartSpinnerNotification&#34;和#34; TitleBarAccessoryViewStopSpinnerNotification&#34;。