タブバーのコントローラー内のナビゲーションコントローラ、または共有のナビゲーションルートビュー

StackOverflow https://stackoverflow.com/questions/576764

質問

ようにしていを実施するUI構造の Tweetie アプリとして振る舞うと考えられていくトップレベルのビューコントローラのようにナビゲーションコントローラー、ルートビューは"経済計算"テーブル。をクリックする口座に為替による振込金を受入れ、そのレベルは、タブバーに。それぞれのタブに項目一覧が表すことができドリルダウンしているとみられ、今後もその後のレベルを表示しないをタブバー)

このように、このように実施階層:

  • UINavigationController
    1. : UITableViewController
    2. UITabBarController
      1. ツイート: UITableViewController
        • 詳細ビューのツイート/ユーザ/など
      2. 回答: UITableViewController
      3. ...

こう[^1]が表示される未サポートによるSDK書 -pushViewController:animated: (追加):

viewController:Viewコントローラー押しをスタックです。 できませんのインスタンスでタブバーのコントローラです。

私は、以下のように民間のApiのようなものなんなのか、なぜこのご利用は明示的に禁止される場合もう。誰もが知る理由がありますか?

私は考えていたのをタブバーのコントローラとしてのコントローラは、それぞれのタブを含む別のゲンコントローラーがあります。ここではそれぞれnavコントローラーのニーズは、シングルルートビューコントローラー(すなわち、"経済計算"テーブル Tweetie)--このように見えませんの仕事:を押して、テーブルコントローラを第二のnavコントローラのよう取り付けられています。から初めてとなります。はもちろんすべての帳簿を選択した場合は別のアカウントいただくと、痛い。

いつ、どのように実施すね。

[^1]:タブバーのコントローラーのニーズをサブクラス化でタブバーのコントローラーのナビゲーション商品レベルでの滞在と同期をとることで、選択されているタブのナビゲーション項目の個別のタブのテーブルコントローラのプには、それぞれの詳細を見る self.tabBarController.navigationController の代わりに self.navigationController.

役に立ちましたか?

解決

前の2つの答えは、右のそれを得た - 私はツイーティでUITabBarControllerを使用しないでください。これは、ナビゲーションコントローラのスタックにプッシュされますして幸せであるカスタムXXTabBarControllerUIViewControllerの無地サブクラス)を書くために非常に簡単ですが、それでも「ビューコントローラ」哲学によって住んでいます。アカウント固有のビュー上の各「タブには、」(Tweets / Replies / Messages)独自のビューコントローラで、そして限り、彼らが懸念しているとして、彼らは、プレーンオールUITabBarControllerによって画面上でスワップ取得しています。

他のヒント

私はツイーティに似ナビゲーションフレームワークを使用したアプリケーションを構築しています。私は私のブログ WWW上でこれを行う方法についての記事を書きました.wiredbob.com にもソースコードにリンクしています。それはあなたが取ると、別のプロジェクトのための基礎として使用することができ、完全なテンプレートです。幸運!

これは、任意のUIViewControllerにUITabBarを追加することが可能です。あなたが実際にUITabBarControllerをプッシュしており、AppleのAPIのガイドラインに滞在する必要はありません。

その方法

インタフェースビルダでUITabBarはココアタッチライブラリの「Windowsの、ビュー&バー」の下にある。

私は自分のアプリケーションのカップルでこれを行います。 navigationControllerベースのアプリにタブバーを追加するトリックはTabBarControllerを使用しないことです。 、ビューにタブバーを追加し、そのビューTabBarDelegateためのビューコントローラを作成し、ビューコントローラのコードでタブバー上のユーザーの選択に応えます。

私はUIPickerViewなどをリロードするために、異なるデータセットとテーブルビューをリロードすると、サブビューなど、タブバーのビューに追加のビューを追加するためにタブバーを使用します。

私は私のビューを表示しようとしたとき、それは隠しなるだろうのでUITabBarを実装するために過去の時間のために苦しんでいました。その後、私が見つかりました。このポストするます:

基本的に、あなたはこのコード行ごとに、タブバー下の新しいビューを挿入することを確認します:

[self.view insertSubview:tab2ViewController.view belowSubview:myTabBar];

私のアプリでは、ルートビューコントローラはUINavigationコントローラです。アプリ内の特定の時点で、私はUITabBarを表示する必要があります。前回の記事のいくつかが示唆したように、私は、ナビゲーション階層内のUIView上UITabBarを実装しようとしたが、これは作業を行います。しかし、私はタブコントローラが提供するデフォルトの動作をより望んでいたことが判明し、私はUINavigationコントローラでUITabBarControllerを使用する方法を見つけます:

私はUITabBarControllerのビューを表示したい場合は、

1)、私は次の操作を行います。

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.window.rootViewController = myUiTabBarControllerInstance;
私はナビゲーション階層にあった場所に戻したいときは、

2)、私は次の操作を行います。

appDelegate.window.rootViewController = myNavControllerInstance;

これは、私はそれをやった方法です。これは、実際には、ナビゲーションコントローラにtabbarcontrollerを推進しています。それは正常に動作します。私はどこでも、Appleはこの方法をサポートしていないドキュメントで見つけることができませんでした。誰かがこの警告に私のリンクを与えることはできますか?

これが真実であるならば、それはAppleがAppStoreのために私のアプリを公開することを拒否している可能性がありますか?

-(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];
}

これにより達成で組み込みのTabBarControllerションをコントローラです。の絵コンテ:

  1. ドラッグViewController
  2. をクリックしViewControllerのシーン
  3. クリックしeditor>>埋め込むために>>ナビコントローラです。
  4. ドラッグボタンのViewControllerと同じ.
  5. ドラッグTabBarController
  6. 接続ボタンのViewControllerのTabBarController経由押しSegueます。

この場合のみTabBarControllerのRootViewControllerのナビコントローラのスタックです。すべてのTabBarItemsうにナビゲーションバーの一番上に、ユーザーにできるホーム画面の任意の時間にかかわらず、選択したTabBarItem

することが不可欠であると任意のViewControllerションをコントローラのスタックです。

場合、ご提案くださいくるにはどうしたらいいのか、を評価できるよう、ポストの画像のコードは、次の答えです。:)

私はこの問題に接近方法についてのブログ記事を書きました。私にとっては、モーダルビューを使用すると、カスタムタブ・バーの実装を書くよりも簡単な解決策でした。

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

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