我正在使用WKWebView.reload
添加iOS应用内网页浏览器的重新加载按钮
我尝试了两个选项,这两个选项对我来说同样适用,但我想知道与#selector一起使用的技术正确选项是什么。是#selector(class.method)
还是#selector (object.method)
?
这是第一个:
let webView = WKWebView()
view = webView
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(WKWebView.reload))
这里是第二个:
let webView = WKWebView()
view = webView
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(webView))
这是完整的代码
import UIKit
import WebKit
class ViewController: UIViewController {
let webView = WKWebView()
override func loadView() {
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(WKWebView.reload))
}
}
答案 0 :(得分:0)
您的let webView = WKWebView()
正在创建您的新实例..它不会独立于您的#selector
尝试一下:
func reloadWebView() {
webView.reload()
}
你的电话:
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .refresh, target: self, action: #selector(MyViewController.reloadWebView))
答案 1 :(得分:0)
函数reload
未声明为 @objc ,因此,它无法在swift中作为选择器工作。您可能想在ViewController中创建一个函数,并从那里调用重载函数。
@objc func reloadWebView() {
webView.reload()
}
,您的选择器将如下所示
#selector(reloadWebView)
来源:https://developer.apple.com/documentation/webkit/wkwebview/1414969-reload
答案 2 :(得分:0)
目前,我的建议是使用#selector(target.method)
。
当您将self
作为target
传递给#selector(self.method)
时,将webView
传递给target
,然后传递#selector(webView.method)
。
#selector
只是一个编码的ObjC方法名称(不包括类名),因此#selector(ClassName.method)
和#selector(object.method)
都应该有效。但是您可以期望使用#selector(target.method)
进行更好的编译时诊断。