質問

次の「問題」に対して「正しい」ソリューションを選ぶのに助けが必要です。

新しいストーリーボード機能を使用して、アプリケーションのすべての画面をリンクします。基本的に構造は次のように掘削します。

ナビゲーションコントローラー] => [コントローラー#1を表示] => [Tabbarコントローラー] => [コントローラー#2を表示]*

**(そして今のところ重要ではない他のいくつかのタブ)*

最初のビューコントローラー(#1)からタブバーコントローラーの背後にあるビューコントローラーにセグエ(プッシュ)を添付しました。このプッシュは、ユーザーが最初のコントローラーで何かを押して正常に動作するとトリガーされます。

// Execute preset segue
[self performSegueWithIdentifier:@"segueEventDetail" sender:self];

ユーザー(現在はView Controller#2にある)がNavbarのバックボタンを押すと、ユーザーが戻ります。彼が再びセグエをトリガーしたとしたら、2番目のビューコントローラーが再び表示されますが、今では「リセット」されています(空)。 (いくつかのフォーラと記事を読んだ後、これはセグエの使用時に標準的な動作であると思います。

2番目のビューコントローラーの内容が動的であるため(サーバーからのJSON応答に依存します)、これは問題を引き起こします。ユーザーが戻ってきます。

同じ問題を説明しているいくつかのソース(底を参照)を見つけましたが、解決策は異なり、正しいものを選ぶのに何らかの助けが必要です。

要約:

  • ユーザーが押し戻したときに「保持する」/ビューコントローラーの状態を保存するにはどうすればよいですか。

自分の考え:

#1 私は今、私のシングルトンクラスへのJSON応答を(そしてそこからプリストまで)キャッシュし、このデータが存在しているかどうかを2番目のビューコントローラー内でチェックすることを考えており、その後のビューを再構築するよりも、新しいデータを確認します(通常の再開通常の再開手術)。

#2 私が考えているもう1つは、セグエを「バイパス」し、部分的に説明されているビューのスイッチを手動で処理することです()ストーリーボード - AppDelegateのViewControllerを参照してください) - これも可能ですか?

しかし、多分より簡単な/より良いオプションがありますか?

http://www.iphonedevsdk.com/forum/iphone-sdk-development/93913-retaining-data-when-using-storyboards.html ストーリーボード - AppDelegateのViewControllerを参照してください uiviewをシリアル化する方法は?

役に立ちましたか?

解決 2

将来この(私の)質問に出くわす人にとって、これが私がそれを「コーディング」する方法です。

  • ストーリーボードを開き、「タブバーコントローラー」を選択し、属性インスペクターを開きます

  • フィールドの「識別子」を入力します

  • 最初のビューコントローラー(元の投稿のシナリオを参照)では、ViewControllerへのグローバル参照を作成します。

FirstViewController.H

@interface YourViewController : UIViewController {

    UITabBarController *tabController;

}

FirstViewController.M

//Fill the reference to the tabcontroller using the identifier
tabController = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbar"];

次に、FirstViewControllerから切り替えるには、次の行を使用できます。

[[self navigationController] pushViewController:tabController animated:YES];

他のヒント

ええ!解決策を手に入れました。以下をせよ:

あなたは.hファイル:

@property (strong, nonatomic) UITabBarController *tabController;

あなたは.mファイル:

@synthesize tabController;

tabController = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbar"];

選択したインデックスはあなたが行きたいタブです

tabController.selectedIndex = 1;

[[self navigationController] pushViewController:tabController animated:YES];

これはさらに単純なソリューションかもしれません(プロパティを使用せずに - 実際、すべてのクラスインスタンスは宛先コントローラーについて知る必要はないため、プッシュ機能の静的として保存するだけです):

static UIVewController *destController = nil;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
if (!storyboard) {
    DLog(Storyboard not found);
    return;
}
if (destController == nil) { //first initialisation of destController
    destController = [storyboard instantiateViewControllerWithIdentifier:@"{Your Destination controller identifyer}"];
    if(!destController) {
        DLog(destController not found)
        return;
    }
}
//set any additional destController's properties;
[self.navigationController pushViewController:destController animated:YES];

DLog 私のバリエーションです NSLog.

しかし、セグエでこれを行う方法は本当に面白いですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top