見出し画像

【徒然iOS】気ままにUIKit81〜Navigation Controllerの設定 ナビゲーションバーのタイトルをビューコントローラーと合わせる〜

概要

このマガジンは四十を過ぎたおっさんが、

を参考にStoryboardでiOSアプリを完全に趣味で楽しんでいるだけな記事を気ままに上げてます。

今回

をハイ、レッツゴ🕺

前準備

念の為、

  1. バックアップ

  2. 新しいクラス

  3. ビューコントローラの追加

  4. イニシャルビューの変更

をいつも通りやってから本題へ💃

こんな感じかな💦

本題の前に、、、

ナビゲーション関連の機能やセグエのビューなんかでちょっとわちゃわちゃしてるので、一旦Storyboardを整理してく〜〜〜🕺

見にくいけど、セグエで作った関連ビューは全て一番上に〜〜〜
ボタンを増やして〜〜〜
セグエメニュー画面にタイトルを入れて〜〜〜
ナビゲーションメニュー用のビューを一つ増やして〜〜〜
繋いで〜〜〜
てな感じでボタンを増やして、前々回のビューと繋いだところ〜〜〜
ナビゲーションコントローラをinitialviewにして繋ぐと、ナビゲーションビュー自体反応しないね👀
Present Modallyにすると、反応した👀

ちょっと、セグエのところも

を参考に、セグエの方法を変更して、試してみよう👀

てな感じで動くようにはなったけど、
表示的に、リンクボタンなんかが死んで、戻れなくなってるね汗
やっぱ元に戻そう💦🤔

と前置きがすっかり長くなったけど💦

本題

Navigation Item(以下、ナビゲーションアイテム)に表示されるタイトルの設定方法

らしい。
普通にAttributeから書き換えればいいのでは?とも思うのだが、、、💦

ビューコントローラーのtitleをナビゲーションアイテムのタイトルに設定したい。

てことをやるらしい。

⒈とりあえず、サイト記事と似た感じで、ビューなんかを用意

とりあえず今感じかな💦
と、実はタイトルさえ入れてコードを組まなくても、シミュレータを実行すれば、表示される👀
👉すでに改善されてる🤔?

⒉一応、コードを組む

//
//  ViewController.swift
//
import UIKit
class ViewController: UIViewController {
    //最初からあるメソッド
    override func viewDidLoad() {
        super.viewDidLoad()
        //タイトルを取得して再設定する。
        self.title = self.title! + ""
    }
}

を参考に書き換え

class NavigationControllerConfigViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        //タイトルを取得して再設定する。
        self.title = self.title ?? "昼" + ""
    }
}

あくまでも参考のコードなんで〜〜〜
強制アンラップの監視が当時よりも強くなったので、この書き方に変更した💦

ここではサンプルとして、残すけど、意味のないコードは残しておかない方がいい。
ややこしくなるだけなんで💦

⒊シミュレータで実行

もちろん表示できるし、
こちらも表示できてる藁🤣

ナビゲーションコントローラーのサブクラスでタイトルを設定する

⒈コードを追加

今回もクラスファイルを追加するだけなので、
下手にCocoaTouchClassから、独立したファイルとして追加するよりも、
今までのHajiHajiProjectファイルにコードを追記する形でいく〜〜〜

//
//  TestNavigationController.swift
//
import UIKit
class TestNavigationController: UINavigationController, UINavigationControllerDelegate {
    //最初からあるメソッド
    override func viewDidLoad() {
        super.viewDidLoad()
        //デリゲートメソッドに自分を設定する。
        self.delegate = self
    }
    //画面出現後の呼び出しメソッド
    func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
        //ナビゲーションバーにスタックされている一番上のナビゲーションアイテムを取り出してタイトルを更新する。
        navigationController.navigationBar.topItem!.title = viewController.title
        //以下のコードはタイトルは表示されない。
        //navigationController.navigationItem.title = viewController.title
    }
}

を参考に追加〜〜〜

class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
    //最初からあるメソッド
    override func viewDidLoad() {
        super.viewDidLoad()
        //デリゲートメソッドに自分を設定する。
        self.delegate = self
    }
    //画面出現後の呼び出しメソッド
    func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
        //ナビゲーションバーにスタックされている一番上のナビゲーションアイテムを取り出してタイトルを更新する。
        navigationController.navigationBar.topItem!.title = viewController.title
        //以下のコードはタイトルは表示されない。
        //navigationController.navigationItem.title = viewController.title
    }
}
てな感じで💦

⒉ナビゲーションコントローラにクラスをセット

てな感じらしい💦

⒊シミュレータで実行

起動〜〜〜
遷移後、タイトルが一瞬表示されて消える動きになった👀
やはり、果たしてこんな動きを使う必要が出てくるだろうか🤔

しかし、

ナビゲーションコントローラにも、クラスを組めたり、タイトルなどの設定操作ができるって例としては必要と判断したので、一応記事にした💦

今回のコード(まとめ)

class NavigationControllerConfigViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        //タイトルを取得して再設定する。
        self.title = self.title ?? "昼" + ""
    }
}

class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
    //最初からあるメソッド
    override func viewDidLoad() {
        super.viewDidLoad()
        //デリゲートメソッドに自分を設定する。
        self.delegate = self
    }
    //画面出現後の呼び出しメソッド
    func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
        //ナビゲーションバーにスタックされている一番上のナビゲーションアイテムを取り出してタイトルを更新する。
        navigationController.navigationBar.topItem!.title = viewController.title
        //以下のコードはタイトルは表示されない。
        //navigationController.navigationItem.title = viewController.title
    }
}

ブラッシュアップ

本題の前にでやっちゃってるので、前々回までと同じ感じで〜〜〜

シミュレータ起動後
ちゃんとタイトルも消えた〜〜〜
てな感じで、ナビゲーションコントローラ自体にセグエ持ってこないと
シミュレータでも同じ動きにはならないので注意してね〜〜〜
実機でも、動作確認済み🕺

記事公開後、

リンクマークをタップ〜〜〜
ハイ、完了🕺

ポイント

ここいら辺は、ほとんど実際には単体機能として使うものを

標準機能を網羅

を意識して、小難しい繋ぎ方になっているだけだからね〜〜〜〜

💃そこんとこよろしく🕺

Apple公式

さて、次回は

をレッツゴする🕺

この記事が気に入ったらサポートをしてみませんか?