top of page

[Swift]モーダルが閉じたことを検知するには、presentationControllerDidDismiss が必要です



みなさんこんにちは。


Swiftでアプリを作っていて、全画面ではないモーダルを閉じた際に動かしたい処理があったのですが、閉じたことをどうしても検知してくれなくて困ったので書き記しておこうと思います。



モーダルを閉じた際に、viewDidAppear は呼ばれないのか

呼ばれないんです。正確には全画面のモーダルでは呼ばれますが、遷移元画面に重ねて表示するタイプのモーダルが呼ばれません。


こういうタイプのものですね。

























ではどうするか

presentationControllerDidDismiss を使いましょう!




【遷移元】

classの記述にUIAdaptivePresentationControllerDelegateを追加します。

class ViewController: UIViewController, CLLocationManagerDelegate, UIAdaptivePresentationControllerDelegate

遷移させる際にはdelegateを使用

    @IBAction func imageTaped(_ sender: UITapGestureRecognizer) {

        // Modal を表示する
        let ModalController = self.storyboard?.instantiateViewController(withIdentifier: "ModalController") as! ModalController

        ModalController.presentationController?.delegate = self
        present(ModalController, animated: true, completion: nil)

    }

【遷移先】

dismissで画面を閉じる前にdelegateを設定する


func setSliderValue() 
{
        // モーダルを表示する際にDelegateを設定する
 if let presentationController = presentationController
 {                
 presentationController.delegate?.presentationControllerDidDismiss?(presentationController)
  }
 dismiss(animated: true, completion: nil)
 }


【遷移元】

presentationControllerDidDismiss を使って待ち構えます。

func presentationControllerDidDismiss(_ presentationController: UIPresentationController) 
{ 

// モーダルの dismiss を検知
// モーダルが閉じた時に実行したい処理を追加
    
}



これでモーダルが閉じたことを検知できるようになります。

最新記事

すべて表示

Comments


bottom of page