为什么我收到错误“类型‘PublicTableViewController’没有成员‘handleRefresh’”

问题描述

我正在尝试快速为我的 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。