0

以前にもこの質問があったことは知っていますが、iOS 5 でインターフェイスの向きに応じて異なるビューをサポートするにはどうすればよいですか?

Apple による例は、PortraitViewController と LandscapeViewController を示しています。PortraitViewController は、LandscapeViewController を作成し、回転通知のために自身を登録します。回転通知を受信すると、現在のインターフェイスの向きに応じて、LandscapeViewController をプッシュまたはポップします。

ここまでは順調ですね。

しかし、両方のコントローラーが同期したデータを保持するにはどうすればよいでしょうか? (横向きと縦向きのビューが異なるだけで、技術的にはユーザーにとって同じコントローラーであるため、明らかに同じデータが表示されます)。どちらにも、データをリロードする「データのリロード ボタン」があります。LandscapeViewController が再ロードしたときに PortraitViewController に同じデータを表示するように指示するにはどうすればよいですか? またその逆も同様です。

もう 1 つの問題は、メモリの警告です。インターフェイスがランドスケープ モードの場合、PortraitViewController がアンロードされるというメモリ警告が表示されます。ここで、LandscapeViewController のデータをリロードすると、PortraitViewController は同じことを実行できません。これは、アンロードされ、アウトレットがまだ nil に設定されているためです。

これらすべての問題にどのように対処すればよいですか?

4

3 に答える 3

1

あなたは実際に最初に新しいxibを作らなければなりません...

file --new --file select user interfaceselectviewなどに移動して新しいXIBを作成します

次に、新しいビューを選択し、右側のパネルのIDインスペクターに移動して、クラス名を追加し、xibを古い.hファイルと.mファイルに接続します。

重要なステップ...

新しいxibビューをファイルの所有者に接続します

これで、新しいxibがoldviewcontroller.hおよび.mに接続されます。

最後のステップ

appdelegateでifステートメントを使用してIOSに基づいてnibnameを変更します

このためにこれを使用できます。[[UIDevicecurrentDevice]systemVersion]

ifステートメントでは、initwithnameを新しいビューで変更する必要があります。

self.viewController = [[[ViewController alloc] initWithNibName:@ "View" bundle:nil] autorelease

于 2013-02-05T10:01:01.603 に答える
1

だから私がやったのは、インターフェイスの向きに応じて異なるビューを表示する2つのビューを持つ1つのViewControllerを使用することです。これの欠点は、すべてのアウトレットを 2 回接続し、2 回操作する必要があることです。

しかし、この方法で簡単にデータを共有でき、一方のビューがアンロードされているのにもう一方のビューがアンロードされないようにすることができます。

于 2013-02-07T08:01:50.963 に答える
0

データを格納する新しいクラスが必要です。両方の viewController は、この dataController (または任意の名前) への参照を持ちます。また、viewController の viewWillAppear と viewWillDisappear に少しロジックを追加することもできます。最後に、メモリ警告の問題については、viewWillAppear でビューが読み込まれているかどうかを確認し、それに応じて対処できます。

于 2013-02-05T10:18:01.677 に答える