Как реализовать контроль обновления для табличных представлений как общую функцию - PullRequest
0 голосов
/ 19 декабря 2018

У меня много VC, в которых есть таблицы, в которые я добавляю контроль обновления.Это копия вставки в каждом VC.Я хотел переместить управление обновлением в общую функцию в расширении, но я не могу понять, как это сделать.Если есть другой способ избежать копирования и вставки, пожалуйста, дайте мне несколько советов.

Ниже приводится типичная реализация управления обновлением в VC.swift

class MyVC: UIViewController {

    lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: #selector(refresh(_:)), for: UIControlEvents.valueChanged)
         return refreshControl
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        if #available(iOS 10.0, *) {
            messagesTable.refreshControl = refreshControl
        } else {
            messagesTable.addSubview(refreshControl)
       }
    }

    @objc func refresh(_ refreshControl: UIRefreshControl) {
        fetchData()
    }
}
.

1 Ответ

0 голосов
/ 19 декабря 2018

Если все ваши ViewController должны иметь TableView, а также RefreshControl внутри, вы можете создать один суперкласс (вы можете сохранить MyVC) для всех этих контроллеров.

class MyVC: UIViewController {

    lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: #selector(refresh(_:)), for: UIControlEvents.valueChanged)
        return refreshControl
    }()

    func addRefreshControl(to tableView: UITableView) {
        if #available(iOS 10.0, *) {
            tableView.refreshControl = refreshControl
        } else {
            tableView.addSubview(refreshControl)
        }
    }

    @objc func refresh(_ refreshControl: UIRefreshControl) {
        fetchData()
    }

    func fetchData() {
    }
}

, а затем сделать другие ваши контроллерыподклассы MyVC и когда вам нужно добавить RefreshControl, вызовите addRefreshControl с TableView контроллера в качестве параметра

class MessageVC: MyVC {

    @IBOutlet weak var messageTable: UITableView!
    ...
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        addRefreshControll(to: messageTable)
    }
    ...
    override func fetchData() {
        // what should happen when refresh control changes its value
    }
}

... также вы можете переопределить метод fetchData и объявить, что должно происходить при управлении обновлениемменяет значение

...