在 iOS 的 UIWebView 中转到上一个本地 html
go to the previous local html in UIWebView in iOS
在我的项目中有很多 html 文件通过锚链接相互连接。
所有 html 文件在 UITableView
中由 UIWebView 选择后显示。一旦加载锚链接工作,用户可以去选择 html。
现在,当想要返回时,问题就出现了,因为无论我做什么,导航栏中的后退按钮都会将我们带到 tableView
而不是前一个 html。
我如何添加后退按钮以及我如何知道在任何给定时间通过 UIWebView
可以看到哪个 html?
import UIKit
class DisplayViewController: UIViewController, UIWebViewDelegate {
var articleName = “”
@IBOutlet var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
functionOfWebView()
}
func functionOfWebView()
{
let URL = Bundle.main.url(forResource: "\(articleName)", withExtension: "html")
let request = NSURLRequest(url: URL! as URL)
webView.loadRequest(request as URLRequest)
}
您可以通过将 webView 的 "goBack" 操作链接到 UIButton
.
来轻松实现此目的
我假设您正在同一个 webView 中的 html 个文件之间导航。
- 从情节提要中,select webView 然后 select "Connections Inspector":
- 注意"Received Actions"列表中有"goBack"选项;从圆圈拖到按钮:
现在,不是弹出当前 ViewController,按钮应该为您的情况执行所需的功能(返回到 webview 中的上一个网页)。
您必须在 HTML 中添加一个唯一 ID,稍后在使用 "goBack" 操作返回时解析 html 以找到 ID。
在我的例子中,我做了一个 VC 的 属性 isInitialWebPageLoaded
,它反映了 webView 是否从 HTML 字符串加载 - 这暗示了该用户确实点击了 link 或发生了其他事情。
要了解它何时发生 VC 需要遵守 UIWebViewDelegate
协议并像这样实施 func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
:
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
isInitialWebPageLoaded = navigationType != .linkClicked
return true
}
在调用每个后退按钮操作之后,我只需检查:
if webView.canGoBack {
webView.goBack()
} else if isInitialWebPageLoaded == false {
webView.loadHTMLString(yourHTMLString, baseURL: nil)
} else {
navigationController?.popViewController(animated: true)
}
希望对您有所帮助。
在我的项目中有很多 html 文件通过锚链接相互连接。
所有 html 文件在 UITableView
中由 UIWebView 选择后显示。一旦加载锚链接工作,用户可以去选择 html。
现在,当想要返回时,问题就出现了,因为无论我做什么,导航栏中的后退按钮都会将我们带到 tableView
而不是前一个 html。
我如何添加后退按钮以及我如何知道在任何给定时间通过 UIWebView
可以看到哪个 html?
import UIKit
class DisplayViewController: UIViewController, UIWebViewDelegate {
var articleName = “”
@IBOutlet var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
functionOfWebView()
}
func functionOfWebView()
{
let URL = Bundle.main.url(forResource: "\(articleName)", withExtension: "html")
let request = NSURLRequest(url: URL! as URL)
webView.loadRequest(request as URLRequest)
}
您可以通过将 webView 的 "goBack" 操作链接到 UIButton
.
我假设您正在同一个 webView 中的 html 个文件之间导航。
- 从情节提要中,select webView 然后 select "Connections Inspector":
- 注意"Received Actions"列表中有"goBack"选项;从圆圈拖到按钮:
现在,不是弹出当前 ViewController,按钮应该为您的情况执行所需的功能(返回到 webview 中的上一个网页)。
您必须在 HTML 中添加一个唯一 ID,稍后在使用 "goBack" 操作返回时解析 html 以找到 ID。
在我的例子中,我做了一个 VC 的 属性 isInitialWebPageLoaded
,它反映了 webView 是否从 HTML 字符串加载 - 这暗示了该用户确实点击了 link 或发生了其他事情。
要了解它何时发生 VC 需要遵守 UIWebViewDelegate
协议并像这样实施 func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
:
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
isInitialWebPageLoaded = navigationType != .linkClicked
return true
}
在调用每个后退按钮操作之后,我只需检查:
if webView.canGoBack {
webView.goBack()
} else if isInitialWebPageLoaded == false {
webView.loadHTMLString(yourHTMLString, baseURL: nil)
} else {
navigationController?.popViewController(animated: true)
}
希望对您有所帮助。