У меня есть NSTitlebarAccessoryViewController
с неопределенным NSProgressIndicator
в нем. Я хочу, чтобы иметь возможность запускать и останавливать его из разных мест в моем приложении, иногда за пределами контроллера вида.Как активировать счетчик в контроллере просмотра заголовка аксессуаров другого класса?
Я довольно новичок в разработке OS X. Я слышал, что в OS X цепочка ответчиков больше используется, чем в iOS. Я заглянул в цепочку респондеров и как это сделать через NSResponder
, но я действительно не могу этого толковать. Ниже приведен снимок экрана для визуализации.
Вот код для моего строки заголовка в соотв. Контроллер вида:
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, поэтому он не ограничивается протокол расширения.
Я видел, что NSNotificationCenter довольно распространен в этом случае. Просто создайте собственное событие и вызовите его в TitleBarAccessoriyViewController. Однако, если у вас есть такие ситуации, лучше еще раз взглянуть на архитектуру приложения и использовать что-то вроде шаблона Application Controller или шаблона VIPER для создания сложного приложения. Архитектура Massive View Controller может быть не лучшим выбором для таких приложений. –