サトリク
この講座では、ほとんどのアプリに使われているナビゲーションバーを使ったアプリを作成します。
動作環境
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)を選択
④「Navigation Controller」をクリック
これだけで、ナビゲーションバーを設定できました。
左側にもう一つボードが配置されましたが、そのボードはナビゲーションバーのレイアウトを変更するためのボードです。ナビゲーションバーのレイアウト一括で変更したい場合は、そのボードでレイアウトを変更します。
①iPhone11に変更
②左上の再生ボタンで実行
ナビゲーションバーがあることを確認しましょう。
少し見づらいですが、上の部分にナビゲーションバーがあります。
①NavigationControllerの「Title」をクリック
② (Show the Attributes inspector)をクリック
③「Bar Tint」を任意の色に変更(画像の色は、#516C9D)
④「Title Color」をWhite Color
に変更
①画面のナビゲーションバーをクリック
② (Show the Attributes inspector)をクリック
③「Title」に1つ目の画面
と入力
実行してみましょう。
こんな感じになっていれば、成功です。
次に、遷移先の画面を作成します。
①プラスボタンをクリック
②ViewController
をドラッグ&ドロップ
これで遷移先の画面を配置できました。
画面遷移する際のボタンを作成します。
①プラスボタンをクリック
②Button
を画面の真ん中にドラッグ&ドロップ
①ボタンを広げる
②ボタンの「Title」を進む
に「Font」をSystem 30.0
に、「TextColor」をWhiteColorに変更
③Backgroundのカラーを任意の色に変更
進むボタンを押したら、もう一つの画面に遷移するようにしましょう。
controlを押しながら、右の画面にドラッグ&ドロップ
「Show」を選択
ナビゲーションコントローラーで画面遷移したいなら、Showを選択します。
①右側の画面のナビゲーションバーをクリック
② (Show the Attributes inspector)を選択
③「Title」を次の画面
に変更
次は、アプリでよくある設定画面を作成します。
①プラスボタンをクリック
②ViewController
をクリック
①プラスボタンをクリック
②Label
を下に配置した画面に配置
①Label
を選択
② (Show the Attributes inspector)をクリック
③Textを設定画面
に変更、FontをSystem 30.0
に変更
①プラスボタンをクリック
②Bar Button Item
をナビゲーションバーの左側にドラッグ&ドロップ
ナビゲーションバーに配置するボタンは、Button
ではなく、bar Button Item
を使うようにしましょう。
①ナビゲーションバーボタンを選択
② (Show the Attributes inspector)をクリック
③「Title」を設定
に変更
ボタンが見にくいので色を変更します。
①NavigationControllerのナビゲーションバーをクリック
② (Show the Attributes inspector)をクリック
③「Tint」をwhite Color
に変更
設定ボタンをcontrolを押しながら、設定画面にドラッグ&ドロップします。
Present Modally
を選択
ナビゲーションバーを使わない画面遷移にしたい時は、PresentModally
を使います。
実行して確認
進むを押したら、次の画面にスライドするような形で、遷移します。この遷移の仕方が、showです。
設定ボタンを押したら、設定画面が下かか出てきて遷移します。この遷移の仕方は、Present Modallyといいます。
まずは、この2つの画面遷移を覚えておきましょう。
コードからNavigationBarのプロパティを変更:準備
今までは、全てStoryboard上でナビゲーションバーのレイアウトを変更してきましたが、コードでもできます。
次は、コードでナビゲーションバーを変更していきましょう。
Optionを押しながらドラッグ&ドロップすると、オブジェクトを複製できます。
①ナビゲーション変更を選択
② (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超入門】リストを使ったアプリを作ってみよう
本で勉強したい方はこちら
【2021年版】Swift5/Xcode/OSアプリ開発のオススメ参考書・本・書籍まとめ。初心者から上級者まで!
ゼロから学ぶiPhoneアプリ開発入門