web-dev-qa-db-ja.com

iOS 13モジュール - プログラムでSwipe Swipeを呼び出します

モーダルを提示するビューコントローラのモーダル解雇を検出したいのですが。

このメソッドは、新しいCard Modalsで新しいiOS 13スワイプ解除を検出するのに驚くべきことです。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "MyIdentifier" {
        segue.destination.presentationController?.delegate = self
    }
}

extension MyController: UIAdaptivePresentationControllerDelegate {    
    func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
        //clean up UI (de-selecting stuff) once modal has been dismissed
    }
}
 _

ただし、Modalがプログラムでアクションを閉じると、PresentationControllerDidismissは呼び出されません。

@IBAction func btnDismissTap(_ sender: Any) {
    self.dismiss(animated: true, completion: nil)
}
 _

これは、「スワイプ」の却下が何であれ、すべての解雇を同じように検出できるように、プログラムで電話をかけることができる方法がありますか。現在、私のモジュールに余分な「却下」の委任状を書いていて、不要になるようです。

4
William T.

Mojtaba Hosseini、答えは私が探していたものです。

現在、ユーザーがモーダルプラスを却下したことをプレゼンテーションビューに知らせるための代理機能を書く必要があります。スワイプ解除のPresentationControllerDidismissハンドラ

@IBAction func btnDismissTap(_ sender: Any) {
    self.dismiss(animated: true, completion: {
        self.delegate?.myModalViewDidDismiss()
    })
}
 _

私はこれらの両方を同じ方法で扱いたいと思いました、そしてMojtabaの答えは私にとって働きます。ただし、PresentationControllerDidSismissは、Self.Dismiss Completionブロック内でそれを呼び出すと、以前に呼び出す必要があります。

私は自分のコードを「PresentationControllerWilldismiss」(明確にするために)を使って、私がプログラムでプログラムで却下する前にデリゲートと呼ばれ、それは素晴らしい動作をしました。

@IBAction func btnDismissTap(_ sender: Any) {
    if let pvc = self.presentationController {
        pvc.delegate?.presentationControllerWillDismiss?(pvc)
    }
    self.dismiss(animated: true, completion: nil)
}
 _

今、私はコードでモーダル解除を処理するために代理機能を作成する必要がなくなり、私のスワイプハンドラはすべてのシナリオの世話をします。

FYI、モーダルが解除されたら、提示されたUI上のいくつかのUIクリーンアップ(DE-Selectionなど)を実行しています。

3
William T.

@マットが言及されているように、代理人によってビューを却下した人に知らせる必要はありません。それはすでに知られているからです。 [〜#〜]呼び出されるデリゲートメソッドが必要な場合は、ビューを閉じた後、手動で自分自身を呼び出す必要があります。

@IBAction func btnDismissTap(_ sender: Any) {
    self.dismiss(animated: true) {
        presentationController?.delegate?.presentationControllerDidDismiss?(presentationController!)
    }
}
 _
3