2017-06-28 8 views
1

私のアプリでは、モーダルで表示している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に転送されたと思いました。

答えて

0

SFSafariViewControllerを閉じると、svcのdismissメソッドが起動されます。あなたが入っているViewControllerではなく、SFSafariViewControllerの終了を上書きしたい場合は、そのサブクラスをサブクラス化し、そのサブクラスのdismiss funcをオーバーライドする必要があります。

+0

しかし、 'dismiss'メソッドが提示する' UIViewController'に転送されないのですか?この場合はコードが表示されているものです。 – BallpointBen

+0

ドキュメントは、提示されたビューコントローラに渡されるべきだと言いますが、私はそれをテストしただけであり、それはしません。私はSFSafariViewControllerをサブクラス化して、dismiss funcをオーバーライドし、終了時に押されていました。最善の策はそれをサブクラス化することです。 –

+0

うん、そうして、それは動作します。これはバグですか? – BallpointBen

関連する問題