web-dev-qa-db-ja.com

iPhoneストーリーボード:縦向きと横向きで異なるシーン

これを少し下にスクロールすると Apple Developer Page 「代替ランドスケープインターフェースの作成」というセクションがあります。そこで説明されている基本的なアプローチは、向きが変わったときに、異なるNIBファイルをモーダルビューとして表示することです。ストーリーボード機能を使用しているため、NIBがありません。その場合、別の「シーン」をどのようにロードしますか?

それ以外に、Tab Barコントローラーを使用していますが、モーダルビューを表示したくありません。現在の縦向きのビューを、インターフェイスビルダーで設計された横向きのビューに置き換え、タブバーを保持したいだけです。 「代替ランドスケープインターフェースの作成」というタスクを達成するためのストーリーボードの方法は何ですか?ありがとうございました。

26
Korbi

ストーリーボードにビューコントローラーを追加すると、ビューが付属します。これをコンテナビューと呼びます。コンテナービューに、縦向きビューと横向きビューの2つのビューを追加します。サイズインスペクタを使用して、縦向きビューと横向きビューの寸法を適切に設定します。アプリケーションの必要に応じて、ボタン、ビュー、ラベルなどを縦向きと横向きのビューに追加します。次に、向きを変更すると、一方のビューが非表示になり、もう一方のビューが表示されます。

20
T.J.

ナビゲーションコントローラと1つのメインビューを設定できます。次に、縦向きと横向きのレイアウトにテンプレートビューを使用できます(2つの追加ビュー)。

メインビューでコントロールを設定し、各コントロールに一意のタグがあることを確認する必要があります。メインビューは使用されません。代わりに、コントロールを2つのテンプレートビューにコピーし、各ビューの外観に基づいて設定します。これの利点は、各ビューがそのタグを保持することであり、この実装の非常に重要な部分になります。

これを行うには、UIコードの記述とInterface Builderの使用に関してハイブリッドアプローチを使用します。 2つのテンプレートを設定したら、それぞれに一意の識別子を作成します。ビューとそのサブビューを処理するためのロジックを記述する必要があります。選択したテンプレートに基づいてこれらのコレクションを返す再帰的なメソッド。

ルートビューコントローラー実装のコアロジックは、isPortraitをチェックする必要があり、これに基づいて、識別子に基づいて正しいビューをロードします。

この概念を試して、うまくいくかどうかを確認してください。固有のコントロールを持つ2つの個別のビューを使用しない(同じタグを使用する共有アプローチではない)ことの主な利点は、元のサブビューへのアクセスを維持できることです。テキストフィールド、ラベルなどを指すビューコントローラーで定義するインスタンス変数は、どのテンプレートビューが使用されているかに関係なく、引き続きそうします。これにより、データ構造が変更されないまま、モデル、ビュー、コントローラーのアプローチが維持されます。

このアプローチを使用すると、必要に応じてカスタムUIコードを柔軟に記述しながら、インターフェイスビルダーの使用を最大化し、各ビューのテンプレートをレイアウトできます。インターフェイスビルダーのみを使用すると、場合によっては少し制限が生じる可能性があり、向きに基づいてカスタムコードを作成すると、少し面倒な作業が必要になります。

これが一部に役立つことを願っています。

3
ttosh

2つのuiviewを含むxibファイルを作成できます。 xibのファイルの所有者として、ストーリーボードにあるビューthetと同じビューコントローラーを割り当てます。 viewDidLoadでxibファイルをロードし、縦長または横長の適切なビューを追加します。

したがって、多くのビューコントローラを備えたストーリーボードがある場合、向きを変更したいビューコントローラでのみ、2つの可能性(ポートレートビューまたはランドスケープビュー)を設定できます。

私はこのソリューションを使用し、非常にうまくいきました!

1
mattiad