LoginSignup
0
0

More than 5 years have passed since last update.

InterfaceBuilderを利用せずにカスタムNavigationItemクラスを適用する

Last updated at Posted at 2018-02-07

方法はとても簡単でViewControllerのnavigationItemをoverrideすれば良い。

class SampleViewController: UIViewController {
    override var navigationItem: NavigationItem {
        return CustomNavigationItem()
    }
}

UINavigationBarは画面のpush遷移時に遷移先ViewControllerに定義してあるnavigationItemを自身の管理するitemsプロパティに挿入するような仕組みになっている。

なので、ViewControllerに定義してあるnavigationItemは直接呼び出しても、それは今画面に出ているNavigationItemとは別物です。
(set onlyで定義してある時点でわかるとは思いますが。。。)

仕組みさえ覚えれば簡単なのですが、UINavigationBarがsetItemspushItemというトラップを提供しており1、ドキュメント読み込まない人お断り的雰囲気に若干の辛さを覚えるのでした。


  1. これはUINavigationBarをUINavigationController以外のコンテキストで利用する場合に使える機能で、UINavigationController上で利用する場合アプリがクラッシュします。 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0