我有一个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)
})
我也希望从不同的viewControllers启动和停止它,因此它不仅限于协议扩展。
答案 0 :(得分:1)
除了你的问题之外 - 响应者链是一个非常普遍的design pattern如果你计划在软件开发中坚持下去,这绝对值得一读:< / p>
答案 1 :(得分:0)
解耦的直接解决方案是使用NSNotification
与... &#34; TitleBarAccessoryViewStartSpinnerNotification&#34;和#34; TitleBarAccessoryViewStopSpinnerNotification&#34;。