Câu trả lời:
Nó không phải là "nướng vào Swift", nhưng bạn có thể sử dụng các UIKit
phương pháp tiêu chuẩn để làm điều đó. Hãy xem UIApplication's (không dùng nữa) và .openUrl(_:)
open(_:options:completionHandler:)
Swift 4 + Swift 5 (iOS 10 trở lên)
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.open(url)
Swift 3 (iOS 9 trở xuống)
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.openURL(url)
Swift 2.2
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.sharedApplication().openURL(url)
Mới với iOS 9 trở lên, bạn có thể trình bày cho người dùng SFSafariViewController
(xem tài liệu tại đây ). Về cơ bản, bạn nhận được tất cả các lợi ích của việc gửi người dùng đến Safari mà không khiến họ rời khỏi ứng dụng của bạn. Để sử dụng SFSafariViewControll mới, chỉ cần:
import SafariServices
và một nơi nào đó trong trình xử lý sự kiện trình bày cho người dùng trình điều khiển khung nhìn safari như thế này:
let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)
Khung nhìn safari sẽ trông giống như thế này:
sharedApplication
tài sản trong phần mở rộng ứng dụng bị cấm. Để biết thêm: developer.apple.com/l
CẬP NHẬT cho Swift 4: (ghi có vào Marco Weber)
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.shared.openURL(requestUrl as URL)
}
HOẶC đi với nhiều phong cách nhanh hơn bằng cách sử dụng guard
:
guard let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") else {
return
}
UIApplication.shared.openURL(requestUrl as URL)
Swift 3:
Bạn có thể kiểm tra NSURL dưới dạng tùy chọn ngầm định bằng cách:
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.sharedApplication().openURL(requestUrl)
}
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") { UIApplication.shared.openURL(requestUrl as URL) }
Swift 3 & IOS 10.2
UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)
Swift 3 & IOS 10.2
kể từ iOS 10, bạn nên sử dụng:
guard let url = URL(string: linkUrlString) else {
return
}
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
Swift 5
Swift 5: Kiểm tra sử dụng canOpneURL
nếu hợp lệ thì nó mở.
guard let url = URL(string: "https://iosdevcenters.blogspot.com/") else {
return
}
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
Trong Swift 1.2:
@IBAction func openLink {
let pth = "http://www.google.com"
if let url = NSURL(string: pth){
UIApplication.sharedApplication().openURL(url)
}
IOS 11.2 Swift 3.1- 4
let webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
guard let url = URL(string: "https://www.google.com") else { return }
webView.frame = view.bounds
webView.navigationDelegate = self
webView.load(URLRequest(url: url))
webView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
view.addSubview(webView)
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
if let url = navigationAction.request.url,
let host = url.host, !host.hasPrefix("www.google.com"),
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
print(url)
print("Redirected to browser. No need to open it locally")
decisionHandler(.cancel)
} else {
print("Open it locally")
decisionHandler(.allow)
}
} else {
print("not a user click")
decisionHandler(.allow)
}
}