Avatar
Yoshikuni Kato 12/22/2017 6:19 AM
UINavigationControllerviewControllers(もしくはtopViewController or visibleViewController)の変化をKVO(UINavigationControllerDelegate以外)で検出したいと思っているのですが、可能かどうかご存じの方いらっしゃいますでしょうか? 以下のコードで試したのですが、push / popしても何も反応ありませんでした。 class CustomNavigationController: UINavigationController { var token: NSKeyValueObservation? override func viewDidLoad() { super.viewDidLoad() token = self.observe(\.viewControllers) { observed, change in print(observed) print(change) } } } 根源的にやりたいことは次のようなものです: status barのappearanceの変化のために、childViewControllerForStatusBarHiddenをoverrideし、topViewControllerを返すようにしています。 class CustomNavigationController: UINavigationController { override var childViewControllerForStatusBarHidden: UIViewController? { return self.topViewController } } このメソッドのドキュメントを見ると、 If you change the return value from this method, call the setNeedsStatusBarAppearanceUpdate() method. とあり、topViewControllerが変わった段階で setNeedsStatusBarAppearanceUpdateをcallする必要があるので、変化を検出したいです。 (edited)