タブバーの長押しジェスチャを使用します。しかし、特定の 1 つのタブ バー項目に対して長押しジェスチャが必要なだけです。
どうすればこの問題を解決できますか? タブバーの長押しジェスチャーをカスタマイズできますか?
タブバーの長押しジェスチャを使用します。しかし、特定の 1 つのタブ バー項目に対して長押しジェスチャが必要なだけです。
どうすればこの問題を解決できますか? タブバーの長押しジェスチャーをカスタマイズできますか?
をサブクラス化し、それにUITabBarController
追加することができます。ジェスチャ レコグナイザーのデリゲートとして機能することで、長押しを検出するタイミングを選択できます。ユーザーがタッチするとすぐにタブバー項目が選択されるため、プロパティを使用してこのチェックを実行できます。UILongPressGestureRecognizer
tabBar
selectedItem
@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
これが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 にインデックスを付けることができます
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();
}
}
}
タブを切り替えるだけでは、これは起動しません。