Отключить переключение вкладок после длительного нажатия на UITabBarItem

#ios #objective-c #uitabbarcontroller #uigesturerecognizer

#iOS #objective-c #uitabbarcontroller #uigesturerecognizer

Вопрос:

Я хочу отключить UITabBarViewController возможность переключения на длительное нажатие UITabBarItem в определенном tag месте.

Что я пробовал, так это

  1. подкласс UITabBarViewController как UIGestureRecognizerDelegate
  2. добавлено UILongPressGestureRecognizer и установлено delegate значение self
  3. переопределено 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 . В любом случае, это сделало именно то, что мне было нужно, спасибо