 サトリク
サトリク
この講座では、ほとんどのアプリに使われているナビゲーションバーを使ったアプリを作成します。
動作環境
| item | Version | 
|---|---|
| Swift | 5.3 | 
| Xcode | 12.0.1 | 
この講座の完成イメージ
この講座でナビゲーションコントローラーを使いこなせるようになりましょう。
今回作るアプリの機能はこんな感じです。
- 「進むボタン」を押すと、次の画面に遷移する。
- 「ナビゲーションバー変更ボタン」を押すと、ナビゲーションバーの色とタイトルが変更される。
- 左上の「設定ボタン」を押すと、ナビゲーションバーを使わず設定画面に遷移する。

NavigationController とは?
ナビゲーションコントローラーとは、ナビゲーションバーを使って画面遷移することです。

ナビゲーションバーというのは、これです。

ナビゲーションコントローラーを使えば、画面遷移したときに、勝手に戻るボタンが作成されます。
このように簡単な画面遷移ができるのが、ナビゲーションコントローラーです。
アプリ開発手順
プロジェクトの作成
いつも通り、Create a new Xcode project>Appでプロジェクトを作成します。

①「Product Name」に、NavigationControllerと入力
②「Interface」は、Storyboardを選択
③「Language」はSwiftを選択
④全てチェックなし
⑤「Next」をクリック

①Practiceを選択しましょう。
②「Create」をクリック
これでプロジェクト作成が完了です。
storyboard(画面レイアウト)の編集
まずは、Storyboardでレイアウトを完成させましょう。

①Main.storyboardを選択
②画面の上のバーをクリック
③  (Embed In)を選択
 (Embed In)を選択
④「Navigation Controller」をクリック
これだけで、ナビゲーションバーを設定できました。

左側にもう一つボードが配置されましたが、そのボードはナビゲーションバーのレイアウトを変更するためのボードです。ナビゲーションバーのレイアウト一括で変更したい場合は、そのボードでレイアウトを変更します。

①iPhone11に変更
②左上の再生ボタンで実行

ナビゲーションバーがあることを確認しましょう。
少し見づらいですが、上の部分にナビゲーションバーがあります。

①NavigationControllerの「Title」をクリック
②  (Show the Attributes inspector)をクリック
(Show the Attributes inspector)をクリック
③「Bar Tint」を任意の色に変更(画像の色は、#516C9D)
④「Title Color」をWhite Colorに変更

①画面のナビゲーションバーをクリック
②  (Show the Attributes inspector)をクリック
(Show the Attributes inspector)をクリック
③「Title」に1つ目の画面と入力
実行してみましょう。

こんな感じになっていれば、成功です。
次に、遷移先の画面を作成します。

①プラスボタンをクリック
②ViewControllerをドラッグ&ドロップ
これで遷移先の画面を配置できました。
画面遷移する際のボタンを作成します。

①プラスボタンをクリック
②Buttonを画面の真ん中にドラッグ&ドロップ

①ボタンを広げる
②ボタンの「Title」を進むに「Font」をSystem 30.0に、「TextColor」をWhiteColorに変更
③Backgroundのカラーを任意の色に変更

進むボタンを押したら、もう一つの画面に遷移するようにしましょう。
controlを押しながら、右の画面にドラッグ&ドロップ

「Show」を選択
ナビゲーションコントローラーで画面遷移したいなら、Showを選択します。

①右側の画面のナビゲーションバーをクリック
②  (Show the Attributes inspector)を選択
(Show the Attributes inspector)を選択
③「Title」を次の画面に変更
次は、アプリでよくある設定画面を作成します。

①プラスボタンをクリック
②ViewControllerをクリック

①プラスボタンをクリック
②Labelを下に配置した画面に配置

①Labelを選択
②  (Show the Attributes inspector)をクリック
(Show the Attributes inspector)をクリック
③Textを設定画面に変更、FontをSystem 30.0に変更

①プラスボタンをクリック
②Bar Button Itemをナビゲーションバーの左側にドラッグ&ドロップ
ナビゲーションバーに配置するボタンは、Buttonではなく、bar Button Itemを使うようにしましょう。

①ナビゲーションバーボタンを選択
②  (Show the Attributes inspector)をクリック
(Show the Attributes inspector)をクリック
③「Title」を設定に変更
ボタンが見にくいので色を変更します。

①NavigationControllerのナビゲーションバーをクリック
②  (Show the Attributes inspector)をクリック
 (Show the Attributes inspector)をクリック
③「Tint」をwhite Colorに変更

設定ボタンをcontrolを押しながら、設定画面にドラッグ&ドロップします。

Present Modallyを選択
ナビゲーションバーを使わない画面遷移にしたい時は、PresentModallyを使います。
実行して確認
進むを押したら、次の画面にスライドするような形で、遷移します。この遷移の仕方が、showです。
設定ボタンを押したら、設定画面が下かか出てきて遷移します。この遷移の仕方は、Present Modallyといいます。
まずは、この2つの画面遷移を覚えておきましょう。
コードからNavigationBarのプロパティを変更:準備
今までは、全てStoryboard上でナビゲーションバーのレイアウトを変更してきましたが、コードでもできます。
次は、コードでナビゲーションバーを変更していきましょう。

Optionを押しながらドラッグ&ドロップすると、オブジェクトを複製できます。

①ナビゲーション変更を選択
②  (Show the Attributes inspector)をクリック
(Show the Attributes inspector)をクリック
③Titleをナビゲーションバー変更に変更

①1つ目の画面のバーを選択
②command + option + control + enterでコード画面と2分割

16行目と17行目の間にcontrolを押しながらドラッグ&ドロップ

①「Name」にchangeNavBarItemActionと入力
②「Connect」をクリック
コードからNavigationBarのプロパティを変更:コーディング
import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    
    @IBAction func changeNavBarItemAction(_ sender: Any) {
        //ボタンを押したときに呼ばれる場所
    }
    
}
先ほど接続したchangeNavBarItemActionの中に処理を書くと、ボタンを押したときに呼ばれ、処理が行われます。
この中に書いていきましょう。
以下のように、編集しましょう。
import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    @IBAction func changeNavBarItemAction(_ sender: Any) {
        navigationItem.title = "HelloWorld"
    }
    
}

navigationItem.title = "HelloWorld"この1行で、ナビゲーションバーのタイトルを変更することができます。

このように、ボタンを押すと、ナビゲーションバーのタイトルHelloWorldになるはずです!
では次は色を変更してみましょう。
以下のように書き換えましょう。
import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    @IBAction func changeNavBarItemAction(_ sender: Any) {
        navigationItem.title = "HelloWorld"
        navigationController?.navigationBar.barTintColor = UIColor.orange
        navigationController?.navigationBar.tintColor = UIColor.red
    }
    
}

navigationController?.navigationBar.barTintColor = UIColor.orangeは、ナビゲーションバーの色をオレンジにするコードです。
navigationController?.navigationBar.tintColor = UIColor.redは、ナビゲーションバー上のボタンの色を赤にするコードです。

ボタンを押したらナビゲーションバーの色と、ナビゲーションバーのボタンの色が変わるようになります。
これで、今回作りたいアプリが完成しました!
まとめ
- ナビゲーションコントローラーとは、ナビゲーションバーを使って画面遷移すること
- Embed In>Navigation Controllerで簡単にナビゲーションバーにできる
- ナビゲーションバーで画面遷移するときは、showで接続する
- ナビゲーションバーで画面遷移したくない場合は、PresentModallyで接続する
- ナビゲーションバーの上に置くボタンをはButtonではなく、Bar Button Itemを置くこと
 サトリク
サトリク
独学でアプリ開発は厳しくないですか?
このブログ(satorikublog)の筆者サトリクが、初心者の方に教えるサービスをはじめました。
気軽にご相談ください!
 次の講座 【Swift/Xcode超入門】リストを使ったアプリを作ってみよう
【Swift/Xcode超入門】リストを使ったアプリを作ってみよう
 本で勉強したい方はこちら 【2021年版】Swift5/Xcode/OSアプリ開発のオススメ参考書・本・書籍まとめ。初心者から上級者まで!
【2021年版】Swift5/Xcode/OSアプリ開発のオススメ参考書・本・書籍まとめ。初心者から上級者まで!
ゼロから学ぶiPhoneアプリ開発入門







