问题描述
我正在尝试快速为我的 UITableViewController
实现 pull 以重新加载这里是我的代码:
class PublicTableViewController: UITableViewController{
override func viewDidLoad(){
super.viewDidLoad()
...
self.refreshControl?.addTarget(self,action: #selector(PublicTableViewController.handleRefresh(_:)),for: UIControl.Event.valueChanged)
}
func handleRefresh(refreshControl: UIRefreshControl) {
self.tableView.reloadData()
refreshControl.endRefreshing()
}
...
}
但是当我构建它时,我收到了 Type 'PublicTableViewController' 没有成员 'handleRefresh'' 的错误,我不明白为什么。
解决方法
选择器中指定的函数签名与您的实际函数不同。
或者,将您的功能更改为:
@objc func handleRefresh(_ refreshControl: UIRefreshControl) {
self.tableView.reloadData()
}
并保持您的选择器原样。
或者将您的选择器更改为:
self.refreshControl?.addTarget(self,action: #selector(PublicTableViewController.handleRefresh(refreshControl:)),for: .valueChanged)
并保持您的功能不变。
提示:当您编写选择器并点击 PublicTableViewController
后的点时,Xcode 会自动建议正确的函数签名 ;)
像这样改变。
class PublicTableViewController: UITableViewController{
override func viewDidLoad(){
super.viewDidLoad()
...
self.refreshControl?.addTarget(self,action: #selector(self.handleRefresh()),for: UIControl.Event.valueChanged)
}
@objc func handleRefresh() {
self.tableView.reloadData()
}
}
您必须将@objc 添加到方法 sing 中才能采用 #selector。