Search code examples
swiftuitableviewextension-methodsuirefreshcontrol

How can I call a selector from an extension?


I have added a refresh controller to a table view using an extension:

extension UITableViewController {
    func addRefreshController() {
        self.refreshControl = UIRefreshControl()
        self.refreshControl?.tintColor = UIColor.init(colorFromHexaString: VIOLET_COLOR_HEX_STRING)
        self.refreshControl?.attributedTitle = NSAttributedString(string: "Pull to refresh", attributes: [NSAttributedStringKey.foregroundColor : UIColor.init(colorFromHexaString: VIOLET_COLOR_HEX_STRING)])
        refreshControl.addTarget(self, action: #selector(self.refresh), for: UIControlEvents.valueChanged)
        tableView.addSubview(refreshControl!)
    }
}

It's showing this error:

Value of type 'UITableViewController' has no member 'refresh'

But the selector func is in the TableViewController.

class TableViewController: UITableViewController {
      override func viewDidLoad() {
            addRefreshController()
      }
      @objc func refresh () {
      }
}

So, how can I call the selector from an extension?


Solution

  • You should extend your own class, TableViewController instead of UITableViewController if you want to access the selectors of TableViewController.

    extension TableViewController { [...] }