2016-11-03 1 views
-1

app이 새로운 ViewController를로드 할 때마다 (다른보기로 전환) 함수를 실행하려고합니다. 이 함수를 각 ViewController 내부에서 호출하지 않으려면 (약 10 개가 더 추가되어야 함) AppDelegate에서 일종의 관찰자를 추가하여이 작업을 수행하고 싶습니다. 이것이 가능한가? 아니면 어떻게 든 UIViewController 확장의 도움으로 할 수 있습니까?AppViewController에서 AppDelegate로 변경 감지

답변

0

또는 당신은 당신이 이벤트에 UINavigationController가 및 사후 알림을 하위 클래스에 관심이 :

NotificationCenter.default.addObserver(forName: Notification.Name(rawValue: "NavigationControllerWillPush"), object: nil, queue: OperationQueue.main) { 
      notification in 
      // handle push 
     } 
NotificationCenter.default.addObserver(forName: Notification.Name(rawValue: "NavigationControllerWillPop"), object: nil, queue: OperationQueue.main) { 
      notification in 
      // handle pop 
     } 
1

AppDelegate, 옵저버 또는 확장 프로그램을 잊어 버린 경우 Inheritance을 사용하십시오.

모든 UIViewController는 MainViewController 기본 클래스를 확장해야하며 논리를 기본 클래스의 viewDidLoad 메서드 (또는 viewDidAppear)에 배치 할 수 있습니다.

재정의 할 때 수퍼 클래스 메서드를 호출해야합니다.

+0

합니까 내가해야 할 것입니다 의미 :

class NotificationNavigationController: UINavigationController { override func pushViewController(_ viewController: UIViewController, animated: Bool) { NotificationCenter.default.post(name: Notification.Name(rawValue: "NavigationControllerWillPush"), object: nil) super.pushViewController(viewController, animated: animated) } override func popViewController(animated: Bool) -> UIViewController? { NotificationCenter.default.post(name: Notification.Name(rawValue: "NavigationControllerWillPop"), object: nil) return super.popViewController(animated: animated) } } 

그런 다음 응용 프로그램 위임에 당신이 그 통지를 관찰 할 수있다 각 ViewController 하위 클래스? – Vege

+0

예. 중복 된 코드를 피하고보다 확장 성있는 프로그램을 작성하려면 코드 집중화가 올바른 방법입니다. – lubilis