6

何かを見つけた: Tabbar を NavigationController (スタック上にいくつかのビューがある) と組み合わせて、TabBarItem をダブルクリックすると、好きかどうかにかかわらず、ビューが最初の ViewController にポップします。

これを防ぐ方法はありますか?

4

4 に答える 4

5

おそらく、この動作を防止するべきではありません。これは、ステータス バーをタップしてスクロール ビューの一番上までスクロールするような、標準の iPhone UI 規則です。

本当にやりたい場合は、mckeed が述べたようにUITabBarControllerデリゲート メソッドを実装する必要があります。-tabBarController:shouldSelectViewController:ただし、5 つ以上のタブがあるselectedViewController場合は、[その他] セクションにあるビュー コントローラーである可能性がありますがvc[UITabBarController moreNavigationController]. その場合を処理する実装を次に示します。

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc {
    UIViewController *selected = [tbc selectedViewController];
    if ([selected isEqual:vc]) {
        return NO;
    }

    if ([vc isEqual:[tbc moreNavigationController]] &&
        [[tbc viewControllers] indexOfObject:selected] > 3) {
        return NO;
    }

    return YES;
}
于 2010-03-22T08:07:20.300 に答える
1

私は自分でこの問題に遭遇し、それを行う方法を見つけました。UITabBarController のデリゲートを作成しtabBarController:shouldSelectViewController:、同じコントローラーを選択しないように実装します。

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

場合によってのみ防止したい場合は、より複雑なロジックを追加することもできます。

于 2010-01-22T22:38:53.163 に答える
0

これまでに見つけた唯一の方法は、UINavigationControllerのサブクラスを作成し、popToRootViewControllerAnimatedメソッドを上書きしてnilを返すことです。

これは、UITabBarが2回タブ付けされたときに呼び出すメソッドのようです。それが正しい方法かどうかはわかりませんが...この問題に関するフィードバックをお待ちしています...

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated {
    return nil;
}
于 2009-07-27T10:57:41.090 に答える
0

私はこの意図した動作を維持することに同意しますが、同時に、VCスタックを適切に巻き戻すことで面白くなります(ネストされた一連のコアデータオブジェクトを編集する場合など)。私の場合、各VCをキャンセルするのと同じです。

したがって、ルートVCまでポップしていることを知る方法はありますか?viewWillDisappear中のキャンセル/ロールバック操作はそれをカットしないと思います。なぜなら、同じビューは保存後にも確実に消えてしまうからです。どういうわけか「キャンセルします-救済します!」を放送する必要があります。特定のタブでルートVCまでポップするとき。正当なキャンセルの場合(つまり、キャンセルボタンが実際にタップされた場合)、そのテストが2回呼び出されるため、viewWillDisappear内の安全チェックとしてダーティ/新しいフラグをチェックすることも役に立ちません。

于 2010-05-10T15:17:14.290 に答える