![見出し画像](https://assets.st-note.com/production/uploads/images/101448022/rectangle_large_type_2_0dd6b01791a8e3729732870c0171bcdb.png?width=1200)
【徒然iOS】気ままにUIKit81〜Navigation Controllerの設定 ナビゲーションバーのタイトルをビューコントローラーと合わせる〜
概要
このマガジンは四十を過ぎたおっさんが、
を参考にStoryboardでiOSアプリを完全に趣味で楽しんでいるだけな記事を気ままに上げてます。
今回
をハイ、レッツゴ🕺
前準備
念の為、
バックアップ
新しいクラス
ビューコントローラの追加
イニシャルビューの変更
をいつも通りやってから本題へ💃
![](https://assets.st-note.com/img/1680066843096-oc16OI5i4G.png?width=1200)
本題の前に、、、
ナビゲーション関連の機能やセグエのビューなんかでちょっとわちゃわちゃしてるので、一旦Storyboardを整理してく〜〜〜🕺
![](https://assets.st-note.com/img/1680067171878-3Vg7DF3fXO.png?width=1200)
![](https://assets.st-note.com/img/1680067263614-J0xscXCVue.png?width=1200)
![](https://assets.st-note.com/img/1680067301606-gKfcKDlnq4.png?width=1200)
![](https://assets.st-note.com/img/1680067350476-vS0DapGStg.png?width=1200)
![](https://assets.st-note.com/img/1680067401037-74mxvTJUXp.png?width=1200)
![](https://assets.st-note.com/img/1680067554761-gCAnvw1pjE.png?width=1200)
![](https://assets.st-note.com/img/1680067706032-p93ClYC0YO.png?width=1200)
![](https://assets.st-note.com/img/1680067875710-TMFUtOxqaR.png?width=1200)
ちょっと、セグエのところも
を参考に、セグエの方法を変更して、試してみよう👀
![](https://assets.st-note.com/img/1680068484896-hE1TabKYf0.png?width=1200)
表示的に、リンクボタンなんかが死んで、戻れなくなってるね汗
やっぱ元に戻そう💦🤔
と前置きがすっかり長くなったけど💦
本題
Navigation Item(以下、ナビゲーションアイテム)に表示されるタイトルの設定方法
らしい。
普通にAttributeから書き換えればいいのでは?とも思うのだが、、、💦
ビューコントローラーのtitleをナビゲーションアイテムのタイトルに設定したい。
てことをやるらしい。
⒈とりあえず、サイト記事と似た感じで、ビューなんかを用意
![](https://assets.st-note.com/img/1680068981767-mnc60xOreG.png?width=1200)
![](https://assets.st-note.com/img/1680069090860-uBaVpGPZJH.png?width=1200)
👉すでに改善されてる🤔?
⒉一応、コードを組む
//
// 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 ?? "昼" + ""
}
}
あくまでも参考のコードなんで〜〜〜
強制アンラップの監視が当時よりも強くなったので、この書き方に変更した💦
ここではサンプルとして、残すけど、意味のないコードは残しておかない方がいい。
ややこしくなるだけなんで💦
⒊シミュレータで実行
![](https://assets.st-note.com/img/1680069452962-YjNRTjO7wH.png?width=1200)
![](https://assets.st-note.com/img/1680069530045-fNRDPoQ5Eq.png?width=1200)
ナビゲーションコントローラーのサブクラスでタイトルを設定する
⒈コードを追加
今回もクラスファイルを追加するだけなので、
下手に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
}
}
![](https://assets.st-note.com/img/1680069819281-4wksETTLNj.png?width=1200)
⒉ナビゲーションコントローラにクラスをセット
![](https://assets.st-note.com/img/1680069954970-ziW0XZpXFS.png?width=1200)
⒊シミュレータで実行
![](https://assets.st-note.com/img/1680070064446-GRRkEopg0E.png?width=1200)
![](https://assets.st-note.com/img/1680070077824-W6y5m164hU.png?width=1200)
やはり、果たしてこんな動きを使う必要が出てくるだろうか🤔
しかし、
ナビゲーションコントローラにも、クラスを組めたり、タイトルなどの設定操作ができるって例としては必要と判断したので、一応記事にした💦
今回のコード(まとめ)
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
}
}
ブラッシュアップ
本題の前にでやっちゃってるので、前々回までと同じ感じで〜〜〜
![](https://assets.st-note.com/img/1680070665412-m5r786PNIt.png?width=1200)
![](https://assets.st-note.com/img/1680070717988-eimhkbKGuY.png?width=1200)
![](https://assets.st-note.com/img/1680070800356-csBFoT3k8b.png?width=1200)
シミュレータでも同じ動きにはならないので注意してね〜〜〜
実機でも、動作確認済み🕺
記事公開後、
![](https://assets.st-note.com/img/1680071192000-QIOU3x9D42.png?width=1200)
![](https://assets.st-note.com/img/1680071213495-pZwWFo2tir.png?width=1200)
ポイント
ここいら辺は、ほとんど実際には単体機能として使うものを
標準機能を網羅
を意識して、小難しい繋ぎ方になっているだけだからね〜〜〜〜
💃そこんとこよろしく🕺
Apple公式
さて、次回は
をレッツゴする🕺
この記事が気に入ったらサポートをしてみませんか?