如何从 Swift 3 中的 UIWebview 中的链接打开另一个视图?
Posted
技术标签:
【中文标题】如何从 Swift 3 中的 UIWebview 中的链接打开另一个视图?【英文标题】:How to open another View from links within UIWebview in Swift 3? 【发布时间】:2017-05-27 09:54:48 【问题描述】:当我实现了它在浏览器上完美运行的代码时,它可以在 ios 中打开 safari 并将myapp://
放在地址栏上,它会打开我的应用程序,但我想在点击 UIWebView
内的链接时进行操作
@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)
这是我将网站加载到 webview 的代码并添加了URL TYPE >item0->myapp
item0->URL Scheme->myapp
当我添加到链接例如< a href="myapp://"></a>
时,它不会启动另一个视图并出现错误
Appdelegate
public func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
if request.url?.scheme == "myapp"
// UIApplication.shared.open(request.url!, options: [:], //completionHandler: nil)
let myVC: MyAnotherController = MyAnotherController()
self.present(myVC, animated: true)
return false
return true
收到此错误 'AppDelegate' 类型的值没有成员 'present'"
【问题讨论】:
获取已经在屏幕上的视图控制器的引用(使用根视图控制器,如果您的应用程序有一个或任何其他规定(如果您的应用程序有)),然后调用 present 方法它。 但是即使我没有提到“UIApplication.shared.open(request.url!, options: [:], //completionHandler: nil)” 怎么可能打开 myapp 应用程序我应该怎么做做吗? 你能把你的项目上传到某个地方(最好是谷歌驱动器)并分享链接吗? 此处或您的电子邮件 ID 这取决于你。这是我的电子邮件 ID:saurabhbhatia.jmi@gmail.com 【参考方案1】:从 if block 内部,您需要 return 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
【讨论】:
我确实在 plist 文件中为 myapp 应用程序和 webview 添加了 myapp 在另一个应用程序中,我希望当我点击在另一个应用程序中 myapp 应该打开的链接时,它也无法通过设置 return false 来工作跨度> 如果我需要在同一个应用中打开另一个视图 另一个视图是什么意思? 我的意思是另一个故事板,例如单击按钮(Webview)在同一个应用程序而不是另一个应用程序上打开另一个视图 将 UIApplication.shared.open(request.url!, options: [:], completionHandler: nil) 替换为将呈现另一个视图控制器的语句。示例:让 myVC: MyViewController = MyViewController() self.present(baseVC, animated: true) 【参考方案2】:你可以使用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
但是你也必须在你的应用列表中提到所有的愿望方案..
使用 url 方案打开其他应用
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")
【讨论】:
那么我们如何启动应用程序? 是的,我在 plist 文件中进行了所有设置......我明白......这意味着根据你我需要打开 safari 并点击 url 以便应用程序可以启动 我想我想念你的问题。如果你只是想打开其他应用程序,你不必打开网络视图,只需使用这个UIApplication.shared.open(request.url, options: [:], completionHandler: nil)
并在你的信息中添加方案。列表。
谢谢 :) 实际上我是 Swift 3 IOS 应用程序开发的新手,你有没有好的教程文章,我会很感激的
它不起作用..不知道但是当我点击按钮作为链接并传递“myapp://”这个网址时【参考方案3】:
使用此代码(如果 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
【讨论】:
以上是关于如何从 Swift 3 中的 UIWebview 中的链接打开另一个视图?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 3 的 UIWebview 中会话过期?
如何在 Swift 中的 UIWebView 中加载本地 PDF
从 appdelegate swift 访问 UIwebview