2016-06-30 1 views
1

NSTitlebarAccessoryViewController에 불확실한 NSProgressIndicator이 있습니다. 내 응용 프로그램의 다른 위치에서 시작하고 중지 할 수 있기를 원합니다. 때로는보기 컨트롤러 외부에 있습니다.다른 클래스의 액세서리 제목 표시 줄보기 컨트롤러에서 회 전자를 활성화하려면 어떻게합니까?

저는 OS X 개발을 처음 접했습니다. OS X에서 응답기 체인이 iOS보다 사용되는 것으로 들었습니다. 응답 체인을 살펴본 결과 NSResponder을 통해이 작업을 수행하는 방법을 살펴 보았습니다.하지만 실제로는 이해할 수 없습니다. 아래는 시각화를위한 스크린 샷입니다. 여기

enter image description here

내 제목 표시 줄의 접속 용 코드입니다. 뷰 컨트롤러 :이 프로토콜에 국한되지 않도록,

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을 중지 찾고 : 다음 해요 프로토콜 확장을 통해 전화를 할

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) 
    } 
    } 
} 

확장.

+0

NSNotificationCenter는이 경우에 사용하는 것이 일반적입니다. 커스텀 이벤트를 생성하고 TitleBarAccessoriyViewController에서 리스닝을 스폰하십시오. 그러나 이러한 상황이 계속되면 응용 프로그램 아키텍처를 다시 한 번 살펴보고 응용 프로그램 컨트롤러 패턴이나 VIPER 패턴과 같은 것을 사용하여 복잡한 응용 프로그램을 빌드하는 것이 좋습니다. Massive View Controller 아키텍처가 이러한 앱을위한 최상의 선택이 아닐 수도 있습니다. –

답변

0

디커플링되는 직접적인 해결책은 NSNotification을 사용하는 것입니다. "TitleBarAccessoryViewStartSpinnerNotification"및 "TitleBarAccessoryViewStopSpinnerNotification".

관련 문제