19

私の質問を読んでくれてありがとう。

ユーザーがインデックス4のタブをクリックしたときにポップアップメニューを実装しようとしています。したがって、インデックス4が押されたときにタブバーがviewcontrollerを切り替えないようにしています。

これが私のコードです:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){        
        NSLog(@"NO");
        return NO;
    }else{
        NSLog(@"YES");
        return YES;
    }

}

と を実装しましたがUITabBarControllerDelegateself.delegate = self;機能するのはviewDidLoad1 回だけです。

インデックス 4 のタブをクリックすると、メニューが表示され、タブバーは表示を切り替えません ( GREAT )。しかし、もう一度クリックすると、ログに "NO" が表示されても表示が変わります。ここで何が問題になる可能性がありますか?

ご提案ありがとうございます。

解決した

以下の Kasaname の回答のおかげで、selectedindex を追加して解決し、フラグ インデックス (prevtab) に設定しました。ユーザーがインデックス 4 を選択した場合を除き、prevtab を最後に選択したタブのインデックスに変更します。最終的なコードは次のとおりです。

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){
        self.selectedIndex = prevTab; //only change in this method       
        return NO;
    }else{        
        return YES;
    }

}
4

2 に答える 2

5
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if (tabBarController.selectedIndex == 0) {

    } else if (tabBarController.selectedIndex == 1) {

    } else if (tabBarController.selectedIndex == 2) {

    }
}

このデリゲートを使用しない理由 このデリゲートを使用するとうまくいくと思います

于 2013-05-28T07:57:48.050 に答える