2017-10-12 6 views
0

私はUIPresentationControllerを使用していますが、特定の高さからスライドするカスタム通知ビューを作成しようとしていますが、VCを表示するViewControllerのtouchイベントは検出されません第二のVCが提示されて、それを行うことができる方法はありますか?UIPresentationController touchイベントを渡す

Here is a visual example of whats happening

+0

あなたはまだコードを書いていませんか?もしあなたが既存のソリューション/コードであなたの質問を更新するのはクールだと思います。 – AlexWoe89

答えて

1

少し苦労して私は答えを得ました。あなたのframeOfPresentedViewInContainerViewが画面の一部であっても、そのフレームのcontainerViewのサイズはウィンドウ全体であるため、containerViewのフレームをframeOfPresentedViewInContainerViewと同じであれば、両方のコントローラーとやりとりすることができ、誰かを助けてくれることを願っています。ここに例があります:

class AlertPresentationController: UIPresentationController { 

    override var frameOfPresentedViewInContainerView: CGRect { 
     guard let container = containerView else { 
      fatalError("Error presenting Alert Controller") 
     } 
     let frameHeight: CGFloat = presentingViewController.view.frame.height * 0.2 
     return CGRect(x: 0, y: 0, width: container.frame.width, height: frameHeight) 
    } 

    override func presentationTransitionWillBegin() { 
     containerView?.frame = frameOfPresentedViewInContainerView 
    } 
} 
0

あなたはpresentingViewControllerオブジェクトにアクセスしたい場合は、まず現在のコントローラを却下する必要があります。 notificationControllerにUITapGestureRecognizerを追加し、そのイベントで通知を閉じることで、これを行うことができます。

もう1つの考えられる方法は、UIViewControllerの代わりにUIViewとして通知を実装し、別のコントローラを上に追加するのではなく、viewControllerのビューに直接表示することです。

+0

私はあなたが何を意味しているのか知っています。私はUIViewとしてこれらのタイプの警告を作成しましたが、その警告をapp –

+0

あなたのNotificationsをインスタンス化し、どのViewControllerにも作成して表示する可能性を与える 'AlertFactory'のようなクラスを作成します。すべてのViewControllerが同じ方法で通知を表示する場合は、それを実装するUIViewController拡張を作成して、どのVCからでもアクセスできるようにします – jvrmed

関連する問題