beg*_*der 11 uiwebview ios swift sfsafariviewcontroller
我有一个当前使用webview的应用程序,当在webview中单击某些链接时,它会在Safari中打开这些链接.我现在想要实现Safari视图控制器(SVC),而不是将其启动到Safari应用程序.我做过研究,看过SVC的例子; 但是,我所看到的只是通过点击按钮打开SVC.有没有人有任何建议让我看看或尝试?
这是我的一些代码:
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if navigationType == UIWebViewNavigationType.LinkClicked {
let host = request.URL!.host!;
if (host != "www.example.com"){
return true
} else {
UIApplication.sharedApplication().openURL(request.URL!)
return false
}
return true
}
func showLinksClicked() {
let safariVC = SFSafariViewController(URL: NSURL(string: "www.example.com")!)
self.presentViewController(safariVC, animated: true, completion: nil)
safariVC.delegate = self }
func safariViewControllerDidFinish(controller: SFSafariViewController) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
Bhu*_*hta 16
如果我正确理解您正在加载webview上的页面,当用户点击链接时,您想要在SVC中打开这些页面时,该页面具有某些链接.您可以使用以下委托方法检测webview中的链接点击,然后从那里打开SVC.
编辑
根据编辑过的问题,我可以看到你没有调用showLinksClicked func,你可以调用这个函数,因为我已经在下面的代码中更新了它应该可以工作.
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if navigationType == UIWebViewNavigationType.LinkClicked {
self.showLinksClicked()
return false
}
return true;
}
func showLinksClicked() {
let safariVC = SFSafariViewController(URL: NSURL(string: "www.example.com")!)
self.presentViewController(safariVC, animated: true, completion: nil)
safariVC.delegate = self
}
func safariViewControllerDidFinish(controller: SFSafariViewController) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
vik*_*lla 13
对于Swift 3:
首先,导入SafariServices并将委托集成到您的类中:
import SafariServices
class YourViewController: SFSafariViewControllerDelegate {
Run Code Online (Sandbox Code Playgroud)
然后,使用指定的URL打开Safari:
let url = URL(string: "http://www,google.com")!
let controller = SFSafariViewController(url: url)
self.present(controller, animated: true, completion: nil)
controller.delegate = self
Run Code Online (Sandbox Code Playgroud)
现在,您可以实现委托回调以在用户完成时解除safari:
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
controller.dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
这段代码将允许您执行此操作.
let safariVC = SFSafariViewController(URL: NSURL(string: "https://www.google.co.uk")!)
self.presentViewController(safariVC, animated: true, completion: nil)
safariVC.delegate = self
Run Code Online (Sandbox Code Playgroud)
您可能还需要将其添加到类的顶部:
import SafariServices
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19181 次 |
最近记录: |