6

タブバーの長押しジェスチャを使用します。しかし、特定の 1 つのタブ バー項目に対して長押しジェスチャが必要なだけです。

どうすればこの問題を解決できますか? タブバーの長押しジェスチャーをカスタマイズできますか?

4

5 に答える 5

7

をサブクラス化し、それにUITabBarController追加することができます。ジェスチャ レコグナイザーのデリゲートとして機能することで、長押しを検出するタイミングを選択できます。ユーザーがタッチするとすぐにタブバー項目が選択されるため、プロパティを使用してこのチェックを実行できます。UILongPressGestureRecognizertabBarselectedItem

@interface TabBarController () <UIGestureRecognizerDelegate>
@property (nonatomic, strong) UILongPressGestureRecognizer *longPressRecognizer;

@end

@implementation TabBarController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(recognizerFired:)];
    self.longPressRecognizer.delegate = self;
    [self.tabBar addGestureRecognizer:self.longPressRecognizer];
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    // This will ensure the long press only occurs for the
    // tab bar item which has it's tag set to 1.
    // You can set this in Interface Builder or in code
    // wherever you are creating your tabs.
    if (self.tabBar.selectedItem.tag == 1) {
        return YES;
    }
    else {
        return NO;
    }

}

- (void)recognizerFired:(UILongPressGestureRecognizer *)recognizer {
    // Handle the long press...
}

@end
于 2015-10-06T12:18:44.010 に答える
2

これがSwift 5の解決策です:ストーリーボードまたはコードを使用して「全体」タブバーにロングプレスジェスチャ認識機能を追加します..そして、ViewControllerをデリゲートにすることを忘れないでください..そして、以下のデリゲートメソッドを実装して、着信タッチかどうかを確認しますあなたのタブバーサブビューの「1つ」の中にあります..はいの場合はtrueを返し、そうでない場合はfalseを返します..最初のタブを長押しした場合にのみ認識エンジンを起動させるコードは次のとおりです。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {

    if touch.view?.isDescendant(of: tabBar.subviews[1]) == true {return true}
    return false



}

注: tabbar.subviews 配列カウントは、項目の数 + 1 であり、これはタブバーの背景です..最初の項目のビューが必要な場合は、それを見つけて、0 ではなく 1 にインデックスを付けることができます

于 2020-05-10T19:28:31.427 に答える
1

tabBar 項目の 1 つを長押ししたことを認識したいだけの場合は、対応する viewController のviewDidLoadメソッドでこれを行うことができます。

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget: self action: @selector(handleLongPress:)];
[self.tabBarController.tabBar addGestureRecognizer: longPressGesture];

その後:

- (void)handleLongPress:(UILongPressGestureRecognizer *) recognizer {
    if (recognizer.state == UIGestureRecognizerStateBegan) {

        UITabBar *tabBar = ((UITabBar* )recognizer.view);

        if (tabBar.selectedItem == self.tabBarItem) {
            doSomethingVeryExciting();
        }
    }
}

タブを切り替えるだけでは、これは起動しません。

于 2017-01-09T20:48:57.100 に答える