Swift

【Swift4】Storyboardを使わずにTabやNavigationを実装する方法

Storyboardを使わずにコードのみで、TabやNavigationを実装する方法を紹介していきます。

コードのみでアプリケーションを作る際にすぐにコーディングできるように、この方法を覚えておくと便利だと思います。

実際にコードを実行するとこんな感じになります。

(ホームの画面)

(お問い合わせの画面)

(設定の画面)

この画面をコードのみで実装していきます。

ディレクトリ構成、処理の流れ

まずは、アプリプロジェクトのディレクトリ構成を説明します。

別にこのやり方に従う必要は全くなのですが、私の場合はこんな感じになっています。

Viewフォルダ
・ TextView.swift

Modelフォルダ(今回は何もありません)

Controllerフォルダ
・HomeViewController.swift
・ContactViewController.swift
・SettingViewController.swift
・MainTabBarController.swift
・MainNavigationController.swift

その他ファイル(AppDelegate.swiftなど)

そして、

アプリの全体的な処理の流れは

AppDelegate

→ MainTabBarController でタブを制御

→ 3つのMainNavigationControllerでナビゲーションを制御

→Home, Contact, SettingViewControllerそれぞれがTextViewを描写する。

という感じになっています。

実装したサンプルコード

実装したコードは以下のようになっています。

AppDelegate

AppDelegate.swiftは、新しいメンバ変数の追加とapplication()メソッドを変更します。

MainTabBarController

背景色やアイテムの色を設定したあと、

first, second, thirdViewControllerにMainNavigationControllerのインスタンスを代入していき、

それらをself.viewControllersに配列として代入することでタブバーを実現しています。

また、タブバーのアイコンを変えるにはUITabBarItem.SystemItemを変更します。

とても簡単に変更できるので、詳しくはこれを読んでみてください。

https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem

MainNavigationController

UINavigationControllerを継承したあと

背景色やアイテム(戻るボダんなど)、テキストの色を設定します。

こうすることによって

設定済みのMainNavigationControllerのインスタンスを使えば、UINavigationControllerのインスタンスを生成してから設定するよりも効率が良くなりメンテナンスも簡単になります。

Home, Contact, SettingViewController

1. HomeViewController

2. ContactViewController

3. SettingViewController

これらのViewControllerは実際のアプリ画面を描写するために必要なのですが

ポイントはViewControllerとViewを分けていて、

ホーム、お問い合わせ、設定のViewControllerそれぞれがTextViewという一つのViewを再利用しているところです。

こうすることで同じコードを3回書く必要がなく

開発規模が大きくなっても後から困ることがありませんし、メンテナンス性も高くなります。

TextView

TextViewはイニシャライズで引数を二つとるのですが、

一つ目はViewのサイズを決めるframeと、二つ目は画面に描写する文字を指定するtextです。

例えばtextにHello worldという文字列を渡せば、画面に「Hello world」と表示されますし

ViewControllerでのインスタンス生成時にホーム、お問い合わせ、設定など、好きな文字列を渡して表示させることができます。

ステータスバーの色を変更する方法

ステータスバーの文字色を白くするには

この記事に詳しく書いてあるので、こちらの方を読んでみてください。

http://progra.blog.jp/archives/5583495.html