2011-01-31 8 views
6

私は2つのUINavigationControllerを持つUITabBarControllerセットアップを持っています。UITabBarControllersタブをダブルクリックすると、ナビゲーションコントローラのルートに移動します

1つのUINavigationControllerに1つのUIViewControllerがあり、他のUINavigationControllerには2つのUIViewControllerがあります。次に、2番目のUIViewControllerに移動し、既に選択されているタブをクリックすると、UINavigationController(これは最初のUIViewControllerになります)のルートに移動します。

これをやめる方法はありますか?ユーザーが既に選択されているタブをクリックしてナビゲーションコントローラのルートに移動することはできません。

答えて

17

これを行うには、アプリケーションデリゲートにタブバーデリゲートコールを受け取る関数を実装する必要があります。 didfinishlaunching方法でアプリのdelegate.mファイルで

[tabBarController setDelegate:self]; 

この行を追加します(また、アプリのデリゲートで)このメソッドを実装します。

- (BOOL)tabBarController:(UITabBarController *)theTabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    return (theTabBarController.selectedViewController != viewController); 
} 

はこれは次のように呼び出されますタブデリゲートプロトコルの一部であり、すでに選択されている場合はタブの選択を停止します。

希望に役立ちます。

+0

私のTabBarControllerが別のViewControllerの一部だったことを除いて、これは機能します。だから、代理人をApp Delegate内に設定するのではなく、適切なViewController内で設定します。ありがとう! – Mausimo

+1

これをアプリケーションデリゲートに入れるのではなく、TabBarViewControllerをサブクラス化し、サブクラスデリゲートをself.delegate = selfに設定しました。ストーリーボードで、私のtabbarviewcontrollerのサブクラスを選択します。 – nearpoint

関連する問題