2017-02-07 8 views
1

Итак, у меня есть простой UIPopoverPresentationController, который отображает некоторый контент.Dismiss UIPopoverPresentationController с любым жестом, а не только нажмите

Пользователь может отклонить его, нажав в любом месте экрана (поведение по умолчанию по умолчанию).

Я хочу, чтобы popover был уволен, если пользователь делает какие-либо нажатия или жест на экране. Желательно перетаскивать жест.

Любая идея, если это возможно? И как?

ответ

1

попробуйте использовать метод touchesBegan:withEvent

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     if let touch = touches.first { 
      if touch.view == self.view { 
       self.dismiss() 
      } else { 
       return 
      } 

     } 
    } 
+0

Спасибо за ответ. К сожалению, не работает. TouchBegan никогда не называется. – Guy

0

ВК вид представлен в пирог. в presentViewController: анимированные: завершение: блок

[self presentViewController:vc animated:YES completion:^{ 
UIView *v1 = vc.view.superview.superview.superview; 

      for (UIView* vx in v1.subviews) { 
       Class dimmingViewClass = NSClassFromString(@"UIDimmingView"); 
       if ([vx isKindOfClass:[dimmingViewClass class]]) 
       { 
        UIPanGestureRecognizer* pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(closePopoverOnSwipe)]; 
        [vx addGestureRecognizer:pan]; 
       } 
      } 
}]; 

у вас есть UIDimmingView, который держит кран жест, который будет закрывать. просто добавьте к нему. Я использую Class dimmingViewClass = NSClassFromString(@"UIDimmingView");, чтобы избежать прямого использования недокументированных API. Я еще не пробовал отправить этот хак на яблоко, но попробую на следующей неделе. Надеюсь, это пройдет. Но я тестировал это, и он действительно называл мой селектор.

Смежные вопросы