【Swift】UIRefreshControl をコードからリフレッシュさせる
本日は UITableView
や UICollectionView
に追加した UIRefreshControl
をコードからリフレッシュさせる方法を紹介したいと思います🦅
結論
基本的には UIRefreshControl
の beginRefreshing()
を呼び出すことで、リフレッシュの UI は表示されているのですが、UITableView
や UICollectionView
など UIScrollView
のサブクラスにアタッチされている UIRefreshControl
の場合は、オフセットを調整しなければユーザに見える形でリフレッシュさせることはできません。ということで下記がそれらを解決した UIRefreshControl
の Extension
になります。
extension UIRefreshControl { func refresh() { if let scrollView = superview as? UIScrollView { scrollView.setContentOffset(CGPoint(x: 0, y: scrollView.contentOffset.y - frame.height), animated: true) } beginRefreshing() sendActions(for: .valueChanged) } }
sendActions
の部分で、UIRefreshControl
に .valueChanged
イベントを送信しています。これにより、ユーザによるプルダウンリフレッシュの時のようにイベントを通知することができます。
refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged) @objc private func refresh(_ sender: UIRefreshControl) { // Refresh handle. }
という感じで本日も以上になります👋