【问题标题】:Why am I getting the error 'Type 'PublicTableViewController' has no member 'handleRefresh''为什么我收到错误“类型‘PublicTableViewController’没有成员‘handleRefresh’’
【发布时间】:2020-12-23 21:54:01
【问题描述】:

我正在尝试为我的UITableViewController 快速执行拉取以重新加载,这是我的代码:

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' has no member 'handleRefresh'' 的错误,我不明白为什么。

【问题讨论】:

  • 你需要用@objc注释它才能与#selector一起使用,@objc func handleRefresh...
  • 如前所述不要忘记匹配参数,但你真的需要一个参数,因为你似乎没有使用它吗?

标签: ios swift uitableview uirefreshcontrol


【解决方案1】:

选择器中指定的函数签名与您的实际函数不同。

或者,将您的功能更改为:

@objc func handleRefresh(_ refreshControl: UIRefreshControl) {
    self.tableView.reloadData()
}

并保持您的选择器不变。

或将您的选择器更改为:

self.refreshControl?.addTarget(self, action: #selector(PublicTableViewController.handleRefresh(refreshControl:)), for: .valueChanged)

并保持你的功能不变。

提示:当您编写选择器并点击PublicTableViewController 之后的点时,Xcode 将自动建议正确的函数签名;)

【讨论】:

    【解决方案2】:

    像这样改变。

    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()
        }
    }
    

    您必须在方法 sing 中添加 @objc 才能采用 #selector。

    【讨论】:

    • 我添加了它并得到了相同的结果
    • 不带参数试试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多