私のアプリでは、モーダルで表示しているSFSafariViewController
があります。解雇時に、提示しているViewControllerには、dismiss
メソッドが呼び出されていません。 UIViewController
の私のサブクラスのコード:SFSafariViewControllerが正常に終了しない(iOS 10.3)
override func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) {
print("will present")
super.present(viewControllerToPresent, animated: flag) {
completion?()
print("did present")
}
}
override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
print("will dismiss)")
super.dismiss(animated: flag) {
completion?()
print("did dismiss")
}
}
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
print("finished with \(controller)")
}
func testSVC() {
let svc = SFSafariViewController(url: URL(string: "https://www.stackoverflow.com")!)
svc.delegate = self
self.present(svc, animated: true) {
print("presented \(svc)")
}
}
を呼び出した後、SafariViewControllerで「完了」をタップは、次の出力生成:
will present
presented <SFSafariViewController: 0x7fd981b2f200>
did present
finished with <SFSafariViewController: 0x7fd981b2f200>
をそして、それはそれです。 dismiss
印刷ステートメントがありません。誰でも私がなぜdismiss
が呼び出されていないのか理解できますか? UIViewController
の解雇はすべてUIViewController
に転送されたと思いました。
しかし、 'dismiss'メソッドが提示する' UIViewController'に転送されないのですか?この場合はコードが表示されているものです。 – BallpointBen
ドキュメントは、提示されたビューコントローラに渡されるべきだと言いますが、私はそれをテストしただけであり、それはしません。私はSFSafariViewControllerをサブクラス化して、dismiss funcをオーバーライドし、終了時に押されていました。最善の策はそれをサブクラス化することです。 –
うん、そうして、それは動作します。これはバグですか? – BallpointBen