zaa*_*aam 5 ios inappbrowser swift sfsafariviewcontroller
如何设置规则,以便当我的用户单击我的应用程序中的任何 Web 链接时,它会在应用程序内浏览器而不是 Safari 中打开?
上下文:我正在构建一个应用程序,其中有几个地方的链接要么是我嵌入的,要么是通过各种用户交互加载的,例如,一个链接指向包含另一个链接的页面。我想确保用户很少离开我的应用程序,因此想在已经开发的应用程序内浏览器中打开所有外部网络链接
目标版本:iOS 11。环境/语言:Swift 4
小智 7
使用SFSafariViewController 的简单解决方案,它在单独的包中可用
import SafariServices
Run Code Online (Sandbox Code Playgroud)
斯威夫特 4,iOS 9.0+
let url = URL(string: "your URL here")
let vc = SFSafariViewController(url: url)
present(vc, animated: true)
Run Code Online (Sandbox Code Playgroud)
如果您需要更多控制 - 使用配置参数(Swift 4, iOS 11.0+):
例子:
let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
let url = URL(string: "your URL here")
let vc = SFSafariViewController(url: url, configuration: config)
present(vc, animated: true)
Run Code Online (Sandbox Code Playgroud)
...它在应用内浏览器而不是 Safari 中打开?
在这种情况下,您将需要自己的 WebView。这是控制器内简单 webView 的快速片段:
import UIKit
import WebKit
/// The controller for handling webviews.
class WebViewController: UIViewController {
// MARK: - Properties
internal lazy var button_Close: UIButton = {
let button = UIButton(type: .custom)
button.setImage(.close, for: .normal)
button.imageEdgeInsets = UIEdgeInsets.init(top: 0, left: -30, bottom: 0, right: 0)
button.addTarget(self, action: #selector(back(_:)), for: .touchUpInside)
return button
}()
public var urlString: String! {
didSet {
if let url = URL(string: urlString) {
let urlRequest = URLRequest(url:url)
self.webView.load(urlRequest)
}
}
}
private lazy var webView: WKWebView = {
let webView = WKWebView()
webView.navigationDelegate = self
return webView
}()
// MARK: - Functions
// MARK: Overrides
override func viewDidLoad() {
super.viewDidLoad()
let barButton = UIBarButtonItem(customView: self.button_Close)
self.button_Close.frame = CGRect(x: 0, y: 0, width: 55.0, height: 44.0)
let negativeSpacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.fixedSpace, target: nil, action: nil)
if #available(iOS 11.0, *) {
negativeSpacer.width = -30
}
self.navigationItem.leftBarButtonItems = [negativeSpacer, barButton]
self.view.addSubview(self.webView)
self.webView.snp.makeConstraints {
$0.edges.equalToSuperview()
}
}
@objc func back(_ sender: Any) {
self.dismiss()
}
}
extension WebViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
// Show here a HUD or any loader
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// Dismiss your HUD
}
}
Run Code Online (Sandbox Code Playgroud)
并呈现这样的 webViewController,如下所示(传递 URLString):
let webViewVC = WebViewController()
webViewVC.urlString = "https://www.glennvon.com/"
let navCon = UINavigationController(rootViewController: webViewVC)
self.navigationController?.present(navCon, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
如果您使用故事板,则只需在控制器中拖动 Web 视图并设置委托即可。这应该可以帮助你:)
| 归档时间: |
|
| 查看次数: |
5292 次 |
| 最近记录: |