18

ユーザーがタブバーアイテムをタップしたときのデフォルトのアクションを無効にしたい。

たとえば、Tab1、Tab2、Tab3のタブバーがあります。Tab1では、ユーザーはView1からView3に移動できます(View1> View2> View3)。ユーザーがView3にいて、Tab1をタップすると、アプリケーションはユーザーをView1(ルートビューコントローラー)に移動します。この機能を無効にしたい。Tab1をタップしてすべてのViewControllerをポップしたくありません。どうやってやるの?

編集:

この動作は少し奇妙ですが、階層が深い場合に便利なショートカットです。

次のUITabBarControllerDelegateメソッドを実装して、このシステム全体のショートカットを無効にすることができます。

#pragma mark -
#pragma mark UITabBarControllerDelegate

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc {
    UIViewController *tbSelectedController = tbc.selectedViewController;

    if ([tbSelectedController isEqual:vc]) {
        return NO;
    }

    return YES;
}
4

1 に答える 1

22

UITabBarControllerデリゲートを見ると、次のメソッドがあります。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

これをクラスに実装すると、UIViewControllerがすでに表示されているかどうかを確認してから、NOを返すことができます。これにより、これが発生しなくなります。

UITabBarControllerに埋め込まれたABPeoplePickerオブジェクトでも同じ問題が発生しました。すでに表示されている「連絡先」タブをもう一度押すと、ABPeoplePickerコントロールに「グループ」が表示されます。

于 2010-11-16T09:18:06.997 に答える