xyz-log.
トップへ戻る
Tech / 2025.12.22 2025.12.22 / 4 分 ...

完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル

S7r1n9y

S7r1n9y

Engineer

完全に理解する Storyboard & UIKit
3 / 30
このシリーズの記事一覧
  1. 1. 完全に理解する Storyboard & UIKit (Day 1): 基礎概念と歴史
  2. 2. 完全に理解する Storyboard & UIKit (Day 2): XcodeでのStoryboardの基本操作
  3. 3. 完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル
  4. 4. 完全に理解する Storyboard & UIKit (Day 4): Auto Layoutの基本原理
  5. 5. 完全に理解する Storyboard & UIKit (Day 5): Auto Layoutの複雑な制約の解決
  6. 6. 完全に理解する Storyboard & UIKit (Day 6): UIStackViewを使った効率的なレイアウト設計
  7. 7. 完全に理解する Storyboard & UIKit (Day 7): Size Classesによるレスポンシブデザイン
  8. 8. 完全に理解する Storyboard & UIKit (Day 8): Segueによる画面遷移とデータ渡し
  9. 9. 完全に理解する Storyboard & UIKit (Day 9): Navigation Controllerの活用
  10. 10. 完全に理解する Storyboard & UIKit (Day 10): Tab Bar Controllerの活用
  11. 11. 完全に理解する Storyboard & UIKit (Day 11): 基本的なUI部品(UILabel, UIButton, UITextField)
  12. 12. 完全に理解する Storyboard & UIKit (Day 12): UITextViewとキーボードハンドリング
  13. 13. 完全に理解する Storyboard & UIKit (Day 13): UIImageViewと画像リソース管理
  14. 14. 完全に理解する Storyboard & UIKit (Day 14): UIScrollViewとコンテンツのスクロール
  15. 15. 完全に理解する Storyboard & UIKit (Day 15): UITableViewの実装基礎
  16. 16. 完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成
  17. 17. 完全に理解する Storyboard & UIKit (Day 17): UICollectionViewの実装基礎
  18. 18. 完全に理解する Storyboard & UIKit (Day 18): UICollectionViewのカスタムレイアウト
  19. 19. 完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用(@IBDesignable, @IBInspectable)
  20. 20. 完全に理解する Storyboard & UIKit (Day 20): アニメーションの実装(UIView Animation)
  21. 21. 完全に理解する Storyboard & UIKit (Day 21): Gesture Recognizerによるタッチ処理
  22. 22. 完全に理解する Storyboard & UIKit (Day 22): UIAlertControllerによるアラートとアクションシート
  23. 23. 完全に理解する Storyboard & UIKit (Day 23): UIDatePickerやUIPickerViewの実装
  24. 24. 完全に理解する Storyboard & UIKit (Day 24): Storyboard Referenceを用いたStoryboard分割
  25. 25. 完全に理解する Storyboard & UIKit (Day 25): XIBとStoryboardの使い分け・併用
  26. 26. 完全に理解する Storyboard & UIKit (Day 26): UIAppearanceによるアプリ全体の色・スタイル管理
  27. 27. 完全に理解する Storyboard & UIKit (Day 27): ダークモード対応とアセットカタログ
  28. 28. 完全に理解する Storyboard & UIKit (Day 28): Accessibility(VoiceOver対応など)のUI設計
  29. 29. 完全に理解する Storyboard & UIKit (Day 29): UIKitからSwiftUIへの移行 / UIKitでのSwiftUI利用
  30. 30. 完全に理解する Storyboard & UIKit (Day 30): 実践:1つのアプリをStoryboardとUIKitで完成させる
完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル

Sponsored

完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル

Day 2ではStoryboard上で「見た目」を作りました。しかし、ボタンを押したときの処理や、ネットワークからデータを読み込んでラベルに表示するといった「動き」はコードで書く必要があります。

そのコードの基礎となり、1つの画面(Scene)を管理する頭脳が UIViewController です。


1. UIViewControllerの役割

UIViewController は、iOSアプリにおけるMVC(Model-View-Controller)アーキテクチャの Controller に相当します。

主な役割は以下の通りです:

  1. Viewの管理: 自身の管理下にあるビュー階層(View Hierarchy)の作成と更新。
  2. イベントハンドリング: ユーザーのタップ操作や、システムからの通知の処理。
  3. データとViewの橋渡し: Model(データ)の変更をView(UI)に反映させる。
  4. ライフサイクルの管理: 画面が表示される前後、消える前後に適切な処理を行う。

Storyboard上に配置した画面(Scene)に対し、右側の Identity InspectorCustom Class に自分が作成したSwiftファイルのクラス名(例: HomeViewController)を指定することで、UIとコードが結びつきます。


2. 理解必須のライフサイクルメソッド

画面が作成され、表示され、隠れ、そして破棄されるまでの一連の流れを ライフサイクル と呼びます。 公式ドキュメントで定義されている重要なメソッド群を、実行される順に解説します。

loadView()

  • 役割: View Controllerの最上位の view プロパティを生成します。
  • 注意: Storyboardを使用している場合はシステムが自動でXMLをパースしてViewを作成するため、このメソッドを自前でオーバーライドしてはいけません(Programmatic UIでのみ使用します)。

viewDidLoad() (超重要⭐️)

  • タイミング: loadView が終わり、Viewがメモリ上にロードされた直後に 1度だけ 呼ばれます。
  • 用途:
    • 初期設定(背景色、ボタンの角丸など)。
    • ネットワークリクエストの開始。
    • NotificationCenter の監視登録。
  • 注意: この時点ではまだ画面の正確なサイズ(Auto Layoutによる最終的な計算結果)は確定していません。

viewWillAppear(_:)

  • タイミング: Viewが画面に表示される直前に呼ばれます(タブ切り替えなどで何度でも呼ばれる)。
  • 用途:
    • 画面が表示されるたびに最新の状態に更新したい処理。
    • ナビゲーションバーの非表示/表示の切り替え。
    • キーボードの監視登録。

viewIsAppearing(_:) (iOS 13以降)

  • タイミング: viewWillAppear の直後、かつビューが階層に追加されるときに呼ばれます。
  • 特徴: このタイミングでは既にViewのサイズやTrait Collection(ダークモード等)が確定しています。サイズに依存したレイアウト調整に最適です。

viewDidAppear(_:)

  • タイミング: Viewが完全に画面に表示された直後に呼ばれます。
  • 用途:
    • アニメーションの開始。
    • APIから取得した結果に基づくアラートの表示。

viewWillDisappear(_:)

  • タイミング: 表示されているViewが、他の画面への遷移などで隠れ始める直前に呼ばれます。
  • 用途:
    • 編集中のデータの自動保存。
    • キーボードの強制非表示(resignFirstResponder())。

viewDidDisappear(_:)

  • タイミング: Viewが完全に画面から見えなくなった直後に呼ばれます。
  • 用途:
    • バックグラウンドで動いている不要な処理の停止。
    • リソースの解放。

3. コードでの記述例

swift
import UIKit class ExampleViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 常にsuperを呼ぶ print("1. viewDidLoad: メモリにロードされました。初期設定を行います。") } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) print("2. viewWillAppear: まもなく画面が表示されます。") } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) print("3. viewDidAppear: 完全に画面が表示されました。アニメーション開始!") } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) print("4. viewWillDisappear: 画面が隠れようとしています。") } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) print("5. viewDidDisappear: 画面が完全に隠れました。") } }

ベストプラクティス: ライフサイクルメソッドをオーバーライドする際は、必ず super.viewDidLoad() のように親クラスの実装を呼び出すクセをつけてください。これを忘れると、システム側で必要な事前準備や片付けが実行されず、予期せぬバグを引き起こす原因になります。


📝 今日のまとめ

  • UIViewController は1つの画面を管理する「頭脳」。
  • Storyboard上で設定した Custom Class によってUIとコードが紐づく。
  • viewDidLoad は1回限りの初期化に使い、viewWillAppear は都度更新したい処理に使う。

さて、UIを配置する場所とコードの連携が分かりました。しかしデバイスにはiPhone SEからiPhone Pro Max、iPadまで様々な画面サイズがあります。 明日の Day 4 では、どんな画面サイズでもレイアウトが崩れない魔法のシステム、Auto Layout の基礎を学びます!

END OF FILE
この記事は役に立ちましたか?
SNSでシェアする
後で読む(ブックマーク)
完全に理解する Storyboard & UIKit
3 / 30
このシリーズの記事一覧
  1. 1. 完全に理解する Storyboard & UIKit (Day 1): 基礎概念と歴史
  2. 2. 完全に理解する Storyboard & UIKit (Day 2): XcodeでのStoryboardの基本操作
  3. 3. 完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル
  4. 4. 完全に理解する Storyboard & UIKit (Day 4): Auto Layoutの基本原理
  5. 5. 完全に理解する Storyboard & UIKit (Day 5): Auto Layoutの複雑な制約の解決
  6. 6. 完全に理解する Storyboard & UIKit (Day 6): UIStackViewを使った効率的なレイアウト設計
  7. 7. 完全に理解する Storyboard & UIKit (Day 7): Size Classesによるレスポンシブデザイン
  8. 8. 完全に理解する Storyboard & UIKit (Day 8): Segueによる画面遷移とデータ渡し
  9. 9. 完全に理解する Storyboard & UIKit (Day 9): Navigation Controllerの活用
  10. 10. 完全に理解する Storyboard & UIKit (Day 10): Tab Bar Controllerの活用
  11. 11. 完全に理解する Storyboard & UIKit (Day 11): 基本的なUI部品(UILabel, UIButton, UITextField)
  12. 12. 完全に理解する Storyboard & UIKit (Day 12): UITextViewとキーボードハンドリング
  13. 13. 完全に理解する Storyboard & UIKit (Day 13): UIImageViewと画像リソース管理
  14. 14. 完全に理解する Storyboard & UIKit (Day 14): UIScrollViewとコンテンツのスクロール
  15. 15. 完全に理解する Storyboard & UIKit (Day 15): UITableViewの実装基礎
  16. 16. 完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成
  17. 17. 完全に理解する Storyboard & UIKit (Day 17): UICollectionViewの実装基礎
  18. 18. 完全に理解する Storyboard & UIKit (Day 18): UICollectionViewのカスタムレイアウト
  19. 19. 完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用(@IBDesignable, @IBInspectable)
  20. 20. 完全に理解する Storyboard & UIKit (Day 20): アニメーションの実装(UIView Animation)
  21. 21. 完全に理解する Storyboard & UIKit (Day 21): Gesture Recognizerによるタッチ処理
  22. 22. 完全に理解する Storyboard & UIKit (Day 22): UIAlertControllerによるアラートとアクションシート
  23. 23. 完全に理解する Storyboard & UIKit (Day 23): UIDatePickerやUIPickerViewの実装
  24. 24. 完全に理解する Storyboard & UIKit (Day 24): Storyboard Referenceを用いたStoryboard分割
  25. 25. 完全に理解する Storyboard & UIKit (Day 25): XIBとStoryboardの使い分け・併用
  26. 26. 完全に理解する Storyboard & UIKit (Day 26): UIAppearanceによるアプリ全体の色・スタイル管理
  27. 27. 完全に理解する Storyboard & UIKit (Day 27): ダークモード対応とアセットカタログ
  28. 28. 完全に理解する Storyboard & UIKit (Day 28): Accessibility(VoiceOver対応など)のUI設計
  29. 29. 完全に理解する Storyboard & UIKit (Day 29): UIKitからSwiftUIへの移行 / UIKitでのSwiftUI利用
  30. 30. 完全に理解する Storyboard & UIKit (Day 30): 実践:1つのアプリをStoryboardとUIKitで完成させる
Related Articles