2

私はUITabBarControllerベースのアプリケーションを持っています。アプリケーションの初回起動時に、構成ガイド (一連のビュー) を起動したいと考えています。もちろん、通常のタブ ナビゲーションとは何の関係もないので、構成ビューを画面全体に表示したいと考えています。

UIApplicationDelegateプロトコルをサポートするクラスがありapplication:didFinishLaunchingWithOptions、次のコードを使用してメソッドから構成ビューを起動しようとしました:

UIViewController *vc = [[self.mainViewController storyboard] instantiateViewControllerWithIdentifier:@"StartupWelcomeViewController"];
[self.mainViewController presentModalViewController:vc animated:YES];

(mainViewController は UITabBarController への参照です)

どうやら、タブ バー ビューの のapplication:didFinishLaunchingWithOptions前に呼び出されます。viewDidLoad上記のコードを、viewDidLoad動作後に呼び出される関数に移動すると。

タブ バー ビューのメソッドの後に呼び出されるUIApplicationDelegateプロトコルまたはUITabBarControllerクラスのメソッドが見つかりません。viewDidLoad

構成ガイドを起動するのに適した場所とその方法は?

4

1 に答える 1

2

(古い質問ですが、アーカイブのために...)

スタートアップ ウィザードをタブ ビュー コントローラーの上に表示する場合は、タブ ビュー コントローラーで表示する必要があります。のような場所からそれを行いますviewDidLoad。そのコードをタブ バー コントローラーに入れたくない場合は、アプリケーション デリゲートなどに配置し、タブ バー コントローラーにそれを呼び出させます。

おそらくよりクリーンな代替手段は、アプリケーションデリゲートからすべてを調整する代わりに、アプリに自動的に表示されるビューを持たないことです-構成ウィザードが実行されているかどうかを確認し、そのウィザードまたはタブバーコントローラーのいずれかを表示することを選択します。関連UI。いずれの場合も、インスタンス化コードは、質問に示されている方法で、ストーリーボードから関連する名前付きオブジェクトを取得します。スタートアップ ウィザードは、自分で設計した非常に単純なデリゲート プロトコルを使用して終了すると、アプリケーション デリゲートにコールバックします。タブバーがすぐに表示されたか、構成が完了した後に表示されたかに関係なく呼び出されます。

この 2 番目のアプローチは、ストーリーボードの作業が減り、コードの作業が増えることを意味します。これまでの私の経験では、アプリケーションが成熟し、その機能が、自動化されたストーリーボード動作によって提供される比較的基本的なフロー オプションを超えて拡張され始めると、これは必然的に発生するようです。

脚注

  • XCode のストーリーボード エディターの属性インスペクター (Command-Option-4) で[Is Initial View Controller ] オプションをオフにすることで、ストーリーボードが起動時にビューを表示しないようにします。この目的で現在使用されているコントローラーを選択すると表示されます。ストーリーボード エディタ領域の一番左にあり、左から右に「どこからともなくフェードイン」する矢印がそれを指しています。これを行うと、ビルドの警告が表示されますが、これはかなり面倒です。警告を回避するためだけに、ダミーの空のビュー コントローラーを追加し、これを初期ビューとして設定することもできます。
于 2013-05-06T22:33:51.640 に答える