方法はとても簡単でViewControllerのnavigationItem
をoverrideすれば良い。
class SampleViewController: UIViewController {
override var navigationItem: NavigationItem {
return CustomNavigationItem()
}
}
UINavigationBarは画面のpush遷移時に遷移先ViewControllerに定義してあるnavigationItemを自身の管理するitems
プロパティに挿入するような仕組みになっている。
なので、ViewControllerに定義してあるnavigationItemは直接呼び出しても、それは今画面に出ているNavigationItemとは別物です。
(set onlyで定義してある時点でわかるとは思いますが。。。)
仕組みさえ覚えれば簡単なのですが、UINavigationBarがsetItems
、pushItem
というトラップを提供しており1、ドキュメント読み込まない人お断り的雰囲気に若干の辛さを覚えるのでした。
-
これはUINavigationBarをUINavigationController以外のコンテキストで利用する場合に使える機能で、UINavigationController上で利用する場合アプリがクラッシュします。 ↩