当我实现完全适用于浏览器的代码时,在ios中打开safari并将myapp://
放在地址栏上它打开我的应用程序,但我想要点击{{1}内的链接}
UIWebView
这是我将网站加载到webview并添加@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
let setURL=URL(string:"https://myapp.com/")
let setURLRequest=URLRequest(url:setURL!)
webView.loadRequest(setURLRequest)
}
URL TYPE >item0->myapp
当我添加链接例如item0->URL Scheme->myapp
时,它不会启动另一个视图获取错误
的appDelegate
< a href="myapp://"></a>
收到此错误'AppDelegate'类型的值没有成员'present'“
答案 0 :(得分:1)
您可以使用UIWebView
委托方法optional public func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
示例
public func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if request.url?.scheme == "myapp" {
// do your work here
UIApplication.shared.open(request.url, options: [:], completionHandler: nil)
}
return true
}
但你必须在你的app plist中提到所有的欲望方案..
使用网址方案打开其他应用
if let url = URL.init(string: "myapp://") {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
print("scheme is missing in info.plist or invalid scheme")
}
} else {
print("invalid url")
}
答案 1 :(得分:1)
从内部 if block ,你需要返回false ,它应该有效。 通过返回false,委托方法告诉webView不应该开始加载URL。
public func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if request.url?.scheme == "myapp" {
// do your work here
UIApplication.shared.open(request.url!, options: [:], completionHandler: nil)
//Add the below line of code to the existing code
return false
}
return true
}
答案 2 :(得分:0)
使用此代码(如果URL的最后一个字符包含“#”,它将起作用)。之所以添加“#”,是因为如果我们导航回到最后一个屏幕,它将无法打开。
在网络视图中链接(www.google.com)。
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest,
navigationType: UIWebViewNavigationType) -> Bool {
// request.url?.absoluteString = "www.google.com/#"
let last = request.url?.absoluteString.last
if last == "#" {
//do stuff here
}
return true
}