Вопрос

Я пытаюсь заставить свой контроллер вида обнаруживать пролистывания в панели UINavigationBar, которая автоматически отображается моим приложением, но она отказывается обнаруживать пролистывания. Есть ли способ сделать это?

Это было полезно?

Решение

Предположим, что вы хотите обнаружить пролистывания влево на панели навигации, вы можете сделать что-то вроде этого при создании контроллера навигации :

   UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewSwipedLeft:)];
   [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
   [self.navigationController.navigationBar addGestureRecognizer:swipeLeft];

, а затем создайте метод, подобный приведенному ниже, для его обработки:

-(void) didSwipedLeft: (UISwipeGestureRecognizer *) gesture {

  if (gesture.state != UIGestureRecognizerStateEnded) {
      return;
  }

  //do something    
}

OBS: поскольку ваш контроллер навигации является классом, который будет оставаться активным в течение нескольких этапов жизненного цикла приложения, важно обратить на это внимание и добавлять распознаватель жестов только при создании контроллера навигации (что означает только добавление один раз), чтобы вы не держали распознаватель жестов друг над другом, что не только приведет к утечке памяти, но и может привести к тому, что ваш метод didSwipedLeft будет вызываться более одного раза.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top