将目标添加到属于不同对象的选择器
Adding a target to a selector belonging to a different object
我有一个像这样的 UIViewController:
import UIKit
import WebKit
class ViewController: UIViewController {
var webView: WKWebView?
var backButton: UIButton?
override func loadView() {
self.webView = WKWebView()
self.backButton = UIButton(type: .system)
self.backButton?.addTarget(self.webView, action: #selector(goBack), for: .touchUpInside)
}
}
此代码尝试将点击后退按钮连接到 WKWebView
的 goBack()
实例方法。请注意,我已将 self.webView
传递给按钮的 addTarget()
调用。
这会导致编译错误:"Use of unresolved identifier 'goBack'"
。我认为 Swift 编译器能够将 goBack()
解析为 WKWebKit
实例。
我可以让它编译的唯一方法是传入 self
并手动转发 goBack()
调用:
override func loadView() {
self.webView = WKWebView()
self.backButton = UIButton(type: .system)
self.backButton?.addTarget(self, action: #selector(goBack), for: .touchUpInside)
}
和
func goBack() {
self.webView?.goBack()
}
我是不是遗漏了什么明显的东西?
您可以限定您的选择器:
#selector(self.webView.goBack)
我有一个像这样的 UIViewController:
import UIKit
import WebKit
class ViewController: UIViewController {
var webView: WKWebView?
var backButton: UIButton?
override func loadView() {
self.webView = WKWebView()
self.backButton = UIButton(type: .system)
self.backButton?.addTarget(self.webView, action: #selector(goBack), for: .touchUpInside)
}
}
此代码尝试将点击后退按钮连接到 WKWebView
的 goBack()
实例方法。请注意,我已将 self.webView
传递给按钮的 addTarget()
调用。
这会导致编译错误:"Use of unresolved identifier 'goBack'"
。我认为 Swift 编译器能够将 goBack()
解析为 WKWebKit
实例。
我可以让它编译的唯一方法是传入 self
并手动转发 goBack()
调用:
override func loadView() {
self.webView = WKWebView()
self.backButton = UIButton(type: .system)
self.backButton?.addTarget(self, action: #selector(goBack), for: .touchUpInside)
}
和
func goBack() {
self.webView?.goBack()
}
我是不是遗漏了什么明显的东西?
您可以限定您的选择器:
#selector(self.webView.goBack)