2011-12-22 5 views
0

タブバーベースのアプリケーション(タブバーコントローラはウィンドウ自体に追加されています)と、それぞれのルートビューコントローラを備えたすべてのナビゲーションコントローラがウィンドウのxibに設定されています。私は4つのタブバー項目を持っています。UITabBarControllerのshouldSelectViewControllerデリゲートメソッドの使用方法

アイテム1をクリックすると、そのアイテムのルートビューコントローラが表示されているとします。このルートビューには、5つのセルを含むテーブルが含まれています。行をクリックすると、新しいビューがナビゲーションスタックにプッシュされます。今、このプッシュされたビューは、新しいView Controllerを再び押すボタンをクリックします。私は4つのそのようなビューコントローラを、ナビゲーションスタック上で次々にプッシュしています。

ここでは、ナビゲーションスタックの3番目のビューにあるとし、タブバーの項目1(以前のものをクリックしたもの)をクリックしました。最初のルートビューコントローラが表示され、ナビゲーションスタック全体が消えてしまいます。私はちょうどこれが起きないようにしたい、つまり、私は3番目のビューコントローラに残り、すべてのタブバー項目をクリックすることもできます(項目を無効にしたくない)。私はそれがメソッドを委譲するタブバーのコントローラを実装することによって達成できることを知っています:shouldSelectViewController、しかし、私はどのように知っていますか?

答えて

8

現在選択されているビューコントローラのチェックを実行します。 現在の値がタップされたタブと同じ場合、デリゲートメソッドでnoを返します。これが何を意味するのか考えてみてください。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController; 
{ 
if ([[tabBarController viewControllers] objectAtIndex:tabBarController.selectedIndex] == viewController) 
    { 
    return NO; 
    } 
else 
    { 
    return YES; 
    } 
} 
+0

ちょっとニック、たくさんのyaar。この2行は私の問題を解決しました。帽子はあなたに男.... :) – anshul

+0

probsはありません。より洗練された方法が利用可能になるでしょう。 –

関連する問題