#ios #objective-c #uitabbarcontroller #uigesturerecognizer
#iOS #objective-c #uitabbarcontroller #uigesturerecognizer
Вопрос:
Я хочу отключить UITabBarViewController
возможность переключения на длительное нажатие UITabBarItem
в определенном tag
месте.
Что я пробовал, так это
- подкласс
UITabBarViewController
какUIGestureRecognizerDelegate
- добавлено
UILongPressGestureRecognizer
и установленоdelegate
значениеself
- переопределено
gestureRecognizerShouldBegin
и заставило его вернутьсяNO
Но это не сработало.
Имейте в виду, что я уже UITapGestureRecognizer *recognizer
добавил в один из UITabBarItem
подобных:
[self.tabBar.subviews[2] addGestureRecognizer:recognizer]
И это работает нормально. Я бы хотел просто отключить распознавание длительного нажатия и срабатывание UITapGestureRecognizer
мгновенно, даже при длительном нажатии.
Спасибо
Комментарии:
1. вы можете напрямую отключить взаимодействие с пользователем, установив UITabBarController.TabBar.userInteractionEnabled = НЕТ; и чтобы включить его, используйте UITabBarController.TabBar.userInteractionEnabled = ДА; при нажатии любой кнопки. Нет необходимости в распознавателе жестов.
Ответ №1:
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleLongPress:)];
longPress.minimumPressDuration = 0.5;
[self addGestureRecognizer:longPress];
и в методе длительного нажатия дескриптора
- (void)handleLongPress:(UILongPressGestureRecognizer*)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
NSLog(@"UIGestureRecognizerStateEnded");
//Do Whatever You want on End of Gesture
[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:FALSE];
}
else if (sender.state == UIGestureRecognizerStateBegan){
NSLog(@"UIGestureRecognizerStateBegan.");
//Do Whatever You want on Began of Gesture
}
}
Сделайте свой AppDelegate
a UITabBarControllerDelegate
, in didFinishLaunchingWithOptions:
вызов
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.delegate = (id)self;
и добавьте этот метод:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;
{
if (viewController.restorationIdentifier isEqualToString:@"foo")
return YES;
else
return NO;
}
Комментарии:
1. Я пропустил метод ` shouldSelectViewController: `, но вы забыли упомянуть, что его следует добавить
AppDelegate
. В любом случае, это сделало именно то, что мне было нужно, спасибо