80

Tweetieアプリのような構造の UI を実装しようとしています。これは次のように動作します。最上位のビュー コントローラーは、ルート ビューが "アカウント" テーブル ビューであるナビゲーション コントローラーのようです。いずれかのアカウントをクリックすると、下部にタブ バーがある第 2 レベルに移動します。各タブ項目には異なるリストが表示され、さらにドリルダウンできます (後続のレベルにはタブ バーは表示されません)。

したがって、実装階層は次のようになります。

  • UINavigationController
    1. アカウント:UITableViewController
    2. UITabBarController
      1. ツイート:UITableViewController
        • ツイート/ユーザー/その他の詳細ビュー
      2. 返信:UITableViewController
      3. ...

これは機能しているように見えます[^1]が、SDKドキュメントによるとサポートされていないようです-pushViewController:animated:(強調を追加):

viewController : スタックにプッシュされるビュー コントローラー。タブ バー コントローラーのインスタンスにすることはできません。

非公開 API などは避けたいのですが、問題なく動作しているように見えるのに、なぜこのような使用が明示的に禁止されているのかわかりません。理由を知っている人はいますか?

タブ バー コントローラーをメイン コントローラーとして配置し、各タブに個別のナビゲーション コントローラーを配置することを考えました。これに関する問題は、各ナビゲーション コントローラーが単一のルート ビュー コントローラー (つまりTweetieの「アカウント」テーブル) を共有する必要があることです。最初から。言うまでもなく、別のアカウントを選択するときのすべての簿記はおそらく苦痛でしょう.

これを正しい方法で実装するにはどうすればよいですか?

[^1]: タブ バー コントローラーは、そのレベルのタブ バー コントローラーのナビゲーション項目が選択されたタブのナビゲーション項目と同期し続けるようにサブクラス化する必要があり、個々のタブのテーブル コントローラーは、それぞれの詳細ビューをself.tabBarController.navigationController代わりにプッシュする必要があります。 self.navigationController.

4

9 に答える 9

63

前の 2 つの回答で正解でしUITabBarControllerた。Tweetie では使用しません。XXTabBarControllerナビゲーション コントローラー スタックにプッシュされることを喜んで受け入れるカスタム( の単純なサブクラス)を作成するのは非常に簡単UIViewControllerですが、それでも「ビュー コントローラー」の哲学に従っています。Tweetsアカウント固有のビュー ( / Replies/ )の各「タブ」Messagesは独自のビュー コントローラーであり、それらに関する限り、プレーン オールによって画面上で交換されていますUITabBarController

于 2009-02-23T19:54:49.800 に答える
33

Tweetie と同様のナビゲーション フレームワークを使用するアプリを作成しています。ソースコードへのリンクもある私のブログwww.wiredbob.comで、これを行う方法についての投稿を書きました。これは、別のプロジェクトのベースとして使用できる完全なテンプレートです。幸運を!

于 2009-04-29T22:19:25.853 に答える
10

私はいくつかのアプリでこれを行います。タブ バーを navigationController ベースのアプリに追加する秘訣は、TabBarController を使用しないことです。ビューにタブ バーを追加し、そのビューのビュー コントローラーを TabBarDelegate にして、ビュー コントローラーのコードでタブ バーでのユーザーの選択に応答します。

タブ バーを使用して、タブ バーのビューに追加のビューをサブビューとして追加したり、別のデータセットを含むテーブル ビューをリロードしたり、UIPickerView をリロードしたりします。

于 2009-02-23T17:00:40.873 に答える
10

UITabBar を任意の UIViewController に追加することができます。そうすれば、実際に UITabBarController をプッシュする必要がないため、Apple API のガイドライン内に留まります。

インターフェイス ビルダーの UITabBar は、Cocoa Touch Library の "Windows, Views & Bars" の下にあります。

于 2009-02-23T07:59:56.087 に答える
3

これが私がやった方法です。これは、実際には tabbarcontroller をナビゲーション コントローラーにプッシュしています。それは正常に動作します。ドキュメントのどこにも、アップルがこの方法をサポートしていないことがわかりませんでした。誰かがこの警告へのリンクを教えてもらえますか?

これが本当なら、Apple が私のアプリをアプリストアに公開することを拒否する可能性はありますか?

-(void)setArrayAndPushNextController
{
    MyFirstViewController *myFirstViewController = [[MyFirstViewController alloc] init];
    MySecondViewController *mySecondViewController = [[MySecondViewController alloc] init];

    myFirstViewController.array = self.array;


    NSArray *array = [[NSArray alloc] initWithObjects:myFirstViewController, mySecondViewController, nil];
    UITabBarController *tab = [[UITabBarController alloc] init];
    tab.viewControllers = array;

    [array release];

    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"first title" image:nil tag:1];
    UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@"second title" image:nil tag:2];

    myFirstViewController.tabBarItem = item1;
    mySecondViewController.tabBarItem = item2;

    [self stopAnimatingSpinner];

    [self.navigationController pushViewController:tab animated:YES];

    [tab release];
    [item1 release];
    [item2 release];
}
于 2011-10-08T08:23:18.157 に答える
3

私のアプリでは、ルート ビュー コントローラーは UINavigation コントローラーです。アプリのある時点で、UITabBar を表示する必要があります。以前の投稿のいくつかが示唆したように、ナビゲーション階層内の UIView に UITabBar を実装しようとしましたが、これは機能します。しかし、タブ コントローラーが提供するデフォルトの動作がもっと必要であることがわかり、UINavigation コントローラーで UITabBarController を使用する方法を見つけました。

1) UITabBarController のビューを表示する場合は、次のようにします。

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.window.rootViewController = myUiTabBarControllerInstance;

2) ナビゲーション階層にいた場所に戻りたいときは、次のようにします。

appDelegate.window.rootViewController = myNavControllerInstance;
于 2011-01-17T09:48:54.993 に答える
1

この問題にどのように取り組んだかについてブログに投稿しました。私にとって、モーダルビューを使用することは、カスタムタブバー実装を作成するよりも簡単なソリューションでした。

http://www.alexmedearis.com/uitabbarcontroller-inside-a-uinavigationcontroller/

于 2011-04-12T18:10:43.477 に答える