Skip to content
Menu
CDhistory
CDhistory

ストーリーボード、XIB、コード

Posted on 9月 6, 2021 by admin
Resources
Download Your Free Copy of
The Missing Manual
for Swift Development

The Guide I Wish I Had When I Started Out

Join 20,Swiftの開発について学ぶ000人以上の開発者たち

無料のコピーをダウンロードする

写真プロジェクトでは、ビューコントローラの設計と作成にもっぱらストーリーボードを使用しています。 このエピソードでは、コーディネータパターンはストーリーボードに限定されないことをお見せします。 ストーリーボードよりも XIB ファイルを好む場合にも、コーディネータ パターンを使用することができます。 もし、どちらも使いたくないのであれば、それも可能です。 プロジェクトのビューコントローラーをどのように設計して作成するかは問題ではありません。

  • Starter Project
  • Storyboards
  • XIBs
  • Code
  • 次は?

Starter Project

このエピソードのスタータープロジェクトは、前回のエピソードの完成したプロジェクトと機能的に同じです。 しかし、いくつか指摘しておきたい違いがあります。 TermsViewController クラスは Storyboardable プロトコルに準拠しなくなり、TermsViewControllerStoryboard、TermsViewControllerXIB、TermsViewControllerCode という 3 つのサブクラスがあります。

TermsViewControllerStoryboard クラスは、前回のエピソードの TermsViewController クラスと同じものです。 TermsViewControllerStoryboardクラスのユーザーインターフェースはMain.storyboardで定義されています。 Storyboardableプロトコルのinstantiate()メソッドを呼び出すことで、このクラスのインスタンスを生成できます。

TermsViewControllerXIBクラスのユーザーインターフェースはTermsViewControllerXIB.xibで定義されています。 TermsViewControllerXIB クラスは、文字列リテラルの使用を避けるために、静的な変数プロパティ nibName を定義しています。 これは、Storyboardable.swiftで定義されているstoryboardIdentifierプロパティと同様です。

名前が示すように、TermsViewControllerCodeクラスはストーリーボードやXIBファイルへのリンクを持っていません。 ユーザーインターフェイスはコードで作成されます。 このため、明らかにかなり多くのコードになります。 これらのビュー コントローラーをそれぞれ見て、それらがどのようにコーディネーター パターンに適合するかを調べてみましょう。

Storyboards

ストーリーボードは数年前からあり、Apple は開発者がそれらを使用することを奨励しています。 私は、作業するほとんどのプロジェクトでストーリーボードを使用しています。 Xcode は、新しいプロジェクトを作成するときに自動的にストーリーボードを作成しますが、1 つの大きなストーリーボードの代わりに、いくつかの小さなストーリーボードを使用することを強くお勧めします。 複数の小さいストーリーボードを使用することにより、マージの衝突をより簡単に回避でき、小さいストーリーボードでの作業はより速く、より複雑ではありません。

Segue はストーリーボードの重要な機能ですが、私はコーディネーター パターンと組み合わせて使用したことはありません。 コーディネータ パターンと組み合わせてセグエを使用することは可能ですが、セグエはアプリケーション フローにビュー コントローラを巻き込み、それは避けたいことです。 プロジェクトのコーディネーターがアプリケーションフローを処理することを忘れないでください。 ビュー コントローラーは、アプリケーション フローについて何も知る必要はなく、他のビュー コントローラーについて知る必要もありません。 私はいつも中規模から大規模のプロジェクトをモジュールに分割しています。 各モジュールには、そのモジュールのビューコントローラを含むストーリーボードがあります。

TermsCoordinator.swift を開き、showTerms()メソッドに移動してください。 この実装は、前回のエピソードの完成したプロジェクトと同じです。 唯一の違いは、ビューコントローラクラスの名前です。 用語コーディネータは、TermsViewController クラスの代わりに TermsViewControllerStoryboard クラスをインスタンス化します。

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerStoryboard.instantiate() // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

XIBs

XIB ファイルは Cocoa 開発の初期から存在しています。 ストーリーボードと比較すると、いくつかの機能が不足していますが、まだその価値はあります。 私は主に、テーブル ビュー セルやコレクション ビュー セルなど、再利用可能なコンポーネントのために XIB を使用しています。 TermsViewControllerXIBクラスのユーザーインターフェースは、Main.storyboardのTermsViewControllerStoryboardクラスのユーザーインターフェースと同じです。 TermsCoordinator.swiftを開き、showTerms()メソッドを再確認してください。 TermsViewControllerXIB クラスのインスタンスを作成するために、XIB ファイルの名前と XIB ファイルを含むバンドルへの参照を渡して init(nibName:bundle:) イニシャライザを呼び出します。

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerXIB(nibName: TermsViewControllerXIB.nibName, bundle: .main) // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

Code

プロジェクトのビュー コントローラーのユーザー インターフェイスをコードで作成することも可能です。 ストーリーボードや XIB ファイルが嫌いな場合は、これが唯一の選択肢となります。 ストーリーボードが導入されて以来、私はこのオプションをあまり使用していませんが、時折役に立つことがあります。

コードでビュー コントローラーを作成および初期化することは、そのビュー コントローラーが複雑または動的なユーザー インターフェイスを持つ場合に便利です。 コード内でビュー コントローラーを作成および初期化することには、もう 1 つの魅力的な利点があります。 それは、依存性注入の一種である初期化子注入を可能にすることです。 依存性注入については、次のエピソードで説明します。

TermsViewControllerCode クラスのインスタンスを作成するために、init() イニシャライザを呼び出します。 これは、init(nibName:bundle:)イニシャライザーを呼び出し、両方の引数に nil を渡すことと同じです。

// MARK: - Helper Methodsprivate func showTerms() { // Initialize Terms View Controller let termsViewController = TermsViewControllerCode() // Install Handlers termsViewController.didCancel = { in self?.finish() } // Present Terms View Controller presentingViewController.present(termsViewController, animated: true)}

次は?

コーディネータパターンは柔軟なパターンです。 ストーリーボード、XIB ファイル、またはその両方を使用することは問題ではありません。 セグメンテーションを使用することもできますが、それを行うと、コーディネータ・パターンの基本原則に違反することになることを覚えておいてください。 ビューコントローラはアプリケーションフローについて知る必要はありませんし、他のビューコントローラについて知るべきでもありません。

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最近の投稿

  • アセラ復活。 NYCまたはボストンで99ドル
  • OMIM Entry – # 608363 – CHROMOSOME 22q11.2 DUPLICATION SYNDROME
  • Kate Albrecht’s Parents – Learn More About Her Father Chris Albrecht And Mother Annie Albrecht
  • テンプル・フォーク・アウトフィッターズ
  • Burr(小説)

アーカイブ

  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語
©2022 CDhistory | Powered by WordPress & Superb Themes