如何在UIView上关闭SFSafariViewController

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在UIView上关闭SFSafariViewController相关的知识,希望对你有一定的参考价值。

class CustomScreen: UIView, SFSafariViewControllerDelegate {
@IBAction func webPageBtnAction(_ sender: Any) {
    if #available(ios 9.0, *) {
        let svc = SFSafariViewController(url: NSURL(string: "https://stackoverflow.com/")! as URL)
        svc.delegate = self
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = svc
    } else {
        // Fallback on earlier versions
    }
}

@available(iOS 9.0, *)
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
    controller.dismiss(animated: false, completion: nil)
}
}

在某些原因,我无法解雇SFSafariViewController。任何的想法?

答案

因为在你的代码中你正在替换rootViewController(对于这种情况来说是一种不好的做法),你应该简单地介绍SFSafariViewController这样做:

let svc = SFSafariViewController(url: NSURL(string: "https://stackoverflow.com/")! as URL)
svc.delegate = self
UIApplication.shared.keyWindow?.rootViewController?.present(svc, animated: true, completion: nil)

据我所知,这是一个不好的做法,因为safariViewControllerDidFinish永远不会被调用,因为CustomScreen将被取代分配当前的rootViewController

以上是关于如何在UIView上关闭SFSafariViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式创建控制器和 UIView 而不使用界面构建器? [关闭]

单元格选择上的 UIView [关闭]

关闭当前视图控制器时 UIView 框架发生变化

UIView在点击问题上显示和隐藏[关闭]

如何在 Storyboard 中显示 UIView [关闭]

在视图控制器上放置无限的uiview对象数组[关闭]