Как седлать индикатор загрузки при прокрутки таблицы в верх?

Для создания индикатора загрузки при прокрутке таблицы в верх в приложении на Swift, можно использовать функциональность UIRefreshControl вместе с UIScrollViewDelegate.

Предположим, у вас есть экземпляр UITableView, который должен показывать индикатор загрузки при прокрутке вверх. Сначала создайте UIRefreshControl:

let refreshControl = UIRefreshControl()
refreshControl.tintColor = UIColor.gray
refreshControl.addTarget(self, action: #selector(refreshTable), for: .valueChanged)
tableView.refreshControl = refreshControl

Здесь мы создали объект refreshControl, установили цвет индикатора загрузки и добавили цель для события .valueChanged, которое будет вызывать метод refreshTable. Затем присвоить этот refreshControl экземпляру UITableView, чтобы он отобразился при прокрутке вверх.

Теперь давайте реализуем метод refreshTable, который будет вызываться при прокрутке вверх:

@objc func refreshTable() {
    // Ваш код для загрузки данных
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
        self.tableView.refreshControl?.endRefreshing() // Завершение обновления
    }
}

Здесь мы имитируем загрузку данных с помощью задержки в 2 секунды. После этого мы вызываем метод endRefreshing() для завершения загрузки, чтобы индикатор перестал отображаться.

Наконец, чтобы это работало, вы должны установить себя в качестве делегата UIScrollViewDelegate у вашего UITableView:

class YourViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIScrollViewDelegate {
    // ...
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    // ...
}

Теперь при прокрутке таблицы вверх с индикатором обновления, ваш метод refreshTable будет вызываться и выполнять код загрузки данных. Как только загрузка будет завершена, индикатор будет скрыт.