2012-04-03 19 views
1

SplitViewControllerアプリケーションで問題が発生しました。マスタービューのテーブルから行を選択すると、ディテールビューが置換セグに置き換えられます。この問題は、新しいインスタンスを作成する/詳細ビューコントローラを再ロードするたびに発生します。私はそれが既にインスタンス化されている場合は、前のインスタンスと詳細ビューを置き換えることができますので、私はそれを持つことができる方法はありますか?テキストフィールドへの入力など、詳細ビューの状態を記憶しておきたい。segueを置き換えて新しいインスタンスを作成する

+0

私はちょうどiPadのストーリーボード(スプリットビューコントローラを含む)で作業を始めていますが、置き換えの代わりに使用できるプッシュセグはありませんか?あるいは、フレームワークはこの場合にプッシュを許可しないのですか?これはiPhoneのイディオムでうまくいきます。 – Rob

+1

私はプッシュを試みたが、私はバックナビゲーションが欲しくないと決めた。私は毎回新しいインスタンスを作成したことを覚えています。私はいくつかの詳細ViewControllerをマスターViewController上のプロパティとして宣言し、それらを最初のsegueでインスタンス化することで解決しました。その後私はperformSegueを呼び出さず、そのインスタンスを手動で詳細ビューにプッシュ/ポップします。 –

+0

replace seguesの使い方も知りたいです。代替セグとプッシュセグの違いは何ですか?置き換えられたビューコントローラがメモリに残っている場合、どのように復元できますか? – Matt

答えて

2

できません。セグエはいつも、私はその後、私は既存のVCの新しいプロパティを記入し、NOを返すセグエを交換するが、MasterVCに、私は

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 

    if ([identifier isEqualToString:@"showCalculatorViewController"]) { 

     if (self.splitViewController) { 

      NSObject *currentDetail = [self.splitViewController.viewControllers lastObject]; 

      if ([currentDetail isKindOfClass:[RootCalcViewController class]]) { 

.... 

を実装して使用してビューコントローラ

1

をインスタンス化します。

私はmasterVCからのナビゲーションを処理するので、私は最初のDetail View ControllerとしてUINAvigationControllerを持っていません。

また、AppDelegateで、正しい詳細VCを設定する必要があります.FlishLaunchingWithOptions生成されたコードは、それがUINavigationControllerであることを前提としています。生成されたMasterViewControllerのviewDidLoadも同様です。 UINAvigationControllerの詳細を置き換えると、アプリのクラッシュを軽減できます。

異なるView Controllerを読み込むときに、「Segueを置き換える」を置き換えます。

0

または、DetailControllerにSingletonパターンを実装させ、+ new、+ allocなどの呼び出しをシングルトンメソッドに転送することができます。

関連する問題