概要
iOS13 以降で仕様が変わっているようです presentationControllerDidDismiss を実装する必要があります
環境
- macOS 11.5
- Xcode 12.5.1
元の画面で実装するコード
import UIKit
extension HomeViewController: UIAdaptivePresentationControllerDelegate {
// NewViewController から戻ったときに呼ばれる
func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
// ここは好きなコードに書き換えて OK
self.viewDidLoad()
}
}
class HomeViewController: UIViewController {
override func viewDidLoad() {
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "toNextViewController") {
let nextvc: NextViewController = (segue.destination as? NextViewController)!
// 以下が重要
nextvc.presentationController?.delegate = self
}
}
}
HomeViewController -> NextViewController の画面遷移は storyboard を使っているので prepare を実装しています
遷移先の画面で実装するコード
extension NextViewController {
override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
super.dismiss(animated: flag, completion: completion)
guard let presentationController = presentationController else {
return
}
if #available(iOS 13.0, *) {
presentationController.delegate?.presentationControllerDidDismiss?(presentationController)
} else {
// Fallback on earlier versions
}
}
}
class NextViewController: UIViewController {
@IBAction func backToHome(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
}
dismiss するボタンを設置することを想定していますがスワイプで消しても同じです
最後に
iOS12 以下もサポートしている場合は viewWillDisappear
を HomeViewController に実装しておいたほうがいいかもしれないです
0 件のコメント:
コメントを投稿