2017-02-07 8 views
1

私は単純なUIPopoverPresentationControllerを使っていくつかのコンテンツを表示します。タップだけでなく、どんなジェスチャーでもUIPopoverPresentationControllerを解除する

ユーザーは、画面上の任意の場所をタップすると(既定のポップオーバー動作)、表示を消すことができます。

ユーザーが画面上で何らかのタップまたはジェスチャーを行った場合、私はポップオーバーを解除します。好ましくはジェスチャーをドラッグします。

可能かどうかそしてどうやって?

答えて

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

回答ありがとうございます。残念ながら動作しません。 touchesBeganは呼び出されません。 – Guy

0

にVCを使用してみてくださいは、ポップオーバーで提示図です。 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を持っています。ただそれに追加してください。ドキュメント化されていないAPIを直接使用しないように、私はClass dimmingViewClass = NSClassFromString(@"UIDimmingView");を使用しています。私はまだこのハックをリンゴに送ろうとはしていないが、来週には試みるだろう。私はそれが合格することを望む。しかし、私はこれをテストし、それは私のセレクタに電話しました。

関連する問題