gpt4 book ai didi

swift - 在 Safari 中打开 UIWebView 链接

转载 作者:行者123 更新时间:2023-11-28 16:02:33 24 4
gpt4 key购买 nike

我有一个使用 Swift 3 的 iOS 应用程序。我在这个应用程序中有一个 uiwebview。每当用户单击 webview 中的链接时,它就会在 webview 中打开。我需要它到链接在 iPhone 上的 Safari 应用程序中打开的位置。这是代码:

class VideosViewController: UIViewController {

@IBOutlet var webView: UIWebView!

override func viewDidLoad() {
super.viewDidLoad()

var URL = NSURL(string: "http://example.com")

webView.loadRequest(NSURLRequest(url: URL! as URL) as URLRequest)


}


override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

你能给我一些我可以输入的代码吗?我是编码新手,非常感谢。

更新:多亏了一个答案,我得到了一些代码,但链接仍然无法在 Safari 中打开。到目前为止,这是代码...

class VideosViewController : UIViewController, UIWebViewDelegate {

@IBOutlet weak var webView : UIWebView!

override func viewDidLoad() {
super.viewDidLoad()

guard let url = URL(string: "http://example.com") else { return }

let request = URLRequest(url: url)
webView.loadRequest(request)

}

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

if navigationType == .linkClicked {

guard let url = request.url else { return true }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
return false
}
return true
}

最佳答案

使用 UIWebView:

确保您的 View Controller 符合 UIWebViewDelegate,然后在 Controller 中实现此方法:

class VideosViewController : UIViewController, UIWebViewDelegate {

@IBOutlet weak var webView : UIWebView!

override func viewDidLoad() {
super.viewDidLoad()

guard let url = URL(string: "http://example.com") else { return }

webView.delegate = self

let request = URLRequest(url: url)
webView.loadRequest(request)

}

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

if navigationType == .linkClicked {

guard let url = request.url else { return true }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
return false
}
return true
}
}

使用 WKWebView:

使用 WKWebView 而不是 UIWebView 并确保您的 Controller 符合 WKNavigationDelegate 协议(protocol)。所以你的实现看起来像下面这样:

class VideosViewController : UIViewController, WKNavigationDelegate {

var webView : WKWebView!

override func viewDidLoad() {
super.viewDidLoad()

guard let url = URL(string: "http://example.com") else { return }

webView = WKWebView(frame: self.view.frame)
webView.translatesAutoresizingMaskIntoConstraints = false
webView.isUserInteractionEnabled = true
webView.navigationDelegate = self

self.view.addSubview(self.webView)

let request = URLRequest(url: url)
webView.load(request)

}


func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

// Check if a link was clicked
if navigationAction.navigationType == .linkActivated {

// Verify the url
guard let url = navigationAction.request.url else { return }
let shared = UIApplication.shared

// Check if opening in Safari is allowd
if shared.canOpenURL(url) {

// Ask the user if they would like to open link in Safari
let alert = UIAlertController(title: "Open link in Safari?", message: nil, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { (alert: UIAlertAction) -> Void in
// User wants to open in Safari
shared.open(url, options: [:], completionHandler: nil)
}))
alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: nil))

present(alert, animated: true, completion: nil)

}
decisionHandler(.cancel)
}
decisionHandler(.allow)
}
}

这样,当用户在 Web View 中单击链接时,系统会提示他们是否要在 Safari 中打开它,如果允许,Safari 将启动并链接将被打开。

关于swift - 在 Safari 中打开 UIWebView 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com