1

TabBarController をビューにプッシュするにはどうすればよいですか?

アプリはビューベースです。アプリには、TabBarController を持つ XIB があり、TabBar をディスプレイにプッシュしたいと考えています。私はすべてをやりましたが、何が間違っているのかわかりません。

TabBarController をプッシュするコードは次のとおりです。

- (void)showTabBar {
TabBar *tbc = [[TabBar alloc] initWithNibName:@"TabBar" bundle:nil];
[self presentModalViewController:tbc animated:YES];
[tbc release];
}

この時点で、XIB には空のビューがあります。したがって、このコードを実行するとディスプレイは白くなります。ディスプレイに表示したい TabBarController もあります。

ご協力いただきありがとうございます。


アップデート:

これらは2つの異なるクラスであると言わざるを得ません。関数「showTabBar」のベースとなるクラスは、TabBarController をプッシュする必要があります。2 番目のクラスは TabBar です。TabBar は、TabBarController のデリゲートです。

だから私はこのように答えを修正しましたが、私は両方を試しました:

[self presentModalViewController:tbc.tabBarController.view animated:YES];

エラーは次のようになります。

Incompatible Objective-C types 'struct UIView *', expected 'struct UIViewController *' when passing argument 1 of 'presentModalViewController:animated:' from distinct Objective-C type

アップデート:

おや、エラーが消えました。涼しい。;)

しかし、アプリは終了しています。以前にこの動作を見たことがありますが、どうすればよいかわかりませんでした。デバッガー コンソールには次のように表示されます。

2011-01-27 15:49:32.629 Touch[3657:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <StartUp: 0x9300f20>.'
4

1 に答える 1

2

UITabBarController クラスは UIViewController クラスを継承するため、タブ バー コントローラーには独自のビューがあり、ビュー プロパティを通じてアクセスできます。タブ バー インターフェイスを展開する場合は、このビューをウィンドウのルートとしてインストールする必要があります。他のビュー コントローラーとは異なり、タブ バー インターフェイスは別のビュー コントローラーの子としてインストールしないでください。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITabBarController_Class/Reference/Reference.html

これが意味することは、これは「許可されていない」ということであり、Apple はあなたの申請を却下する可能性があります。UITabBarController は、アプリケーション デリゲートのルート ビュー (ウィンドウ) に追加することを目的としています。後でタブバーをプッシュする場合は、UIToolBar を uisegmentedcontrol やツールバー ボタンなどと一緒に使用する必要があります。

これを行うアプリ (Wordpress アプリなど) もありますが、ViewController をモーダルに表示すると、コンソールでいくつかの問題が発生することが後でわかります (警告が表示されます)。

于 2011-01-27T14:41:34.840 に答える