2

背景: アプリの UI はタブ バー コントローラーであり、各タブ バーには独自のナビゲーション コントローラーがあります。いくつかのビュー コントローラーは一般的であり、ユーザーは使用しているタブに関係なくそれらにアクセスできます。最初は、これらの一般的なビューのために、ストーリーボード上の 1 つのビュー コントローラーに向かうストーリーボード全体からのセグエを単純に持っていました。しかし、ユーザーが共通のビューにアクセスし、別のタブを選択して、別のナビゲーション コントローラーでその共通のビューに戻ることができることに気付きました。これら 2 つの異なるビュー コントローラーのインスタンス化はありましたか? そうでない場合、ポップされたときにどのナビゲーションコントローラーが「戻る」のですか?

Xcode のクラッシュは、ストーリーボードを開くとすぐにクラッシュし始めるまで、ますます頻繁になりました。同時に、解決を先延ばしにしていた「あいまいなビュー」タイプの警告が多数ありました。そのため、すべての警告がなくなるまで制約を微調整し、ナビゲーション コントローラー間のセグエをなくしました。共通ビューの複数のコピーができただけです。それ以来、Xcode は岩のように安定しています。しかし、今では、ストーリーボードにビュー コントローラーのグループ全体のそれぞれに 3 つのコピーがあり、それらを変更/維持するのは面倒です。

4

2 に答える 2

3

ストーリーボードは非常に強力ですが、便利でもあり、ほぼ間違いなく、単純なインターフェイスと初心者のプログラマー向けに設計されています。そのため、より複雑な (または、より適切に、あまり標準的ではない) インターフェイスを作成する場合は、コードにさらに移行する必要があります。これは、ストーリーボード (コードからインスタンス化された) またはスタンドアロンの XIB ファイル内の名前付きビュー コントローラーの組み合わせである可能性があります。

于 2013-11-15T18:01:44.653 に答える
1

できることは、ストーリーボードに複数のセグエを持たせたいビューコントローラーを複製することです。ビューコントローラーの viewDidLoad で、どのタブから呼び出されたかを確認し、その機能を適応させることができます。

UITabBarController *tabBarController = (UITabBarController *)[[UIApplication sharedApplication] delegate].window.rootViewController;
ALog( @"Selected tab: %d", tabBarController.selectedIndex );

これは単に、選択されたタブであるアプリケーションの UITabBarController に問い合わせます。

したがって、これは 1 つのビューコントローラーに続くものではありませんが、実用的な目的には十分に近いかもしれません。

于 2015-02-04T12:14:48.663 に答える