UICollectionView(UITableView)でpull to refreshを実装する

pull to refreshとは

UICollectionViewやUITableViewを下に引っ張ってrefreshするあれ。
Twitterやinstagram等フィード型のアプリでよく使われている。

実装方法

iOS 10からUIScrollViewにrefreshControlというプロパティが使える。

@available(iOS 10.0, *)
open var refreshControl: UIRefreshControl?

これを使って実装する(UIScrollViewのプロパティなので、UICollectionView/UITableViewに限らずUIScrollViewであれば実装できる)。

final class ViewController: UIViewController {
    @IBOutlet weak var collectionView: UICollectionView!

    private let refreshControl = UIRefreshControl()

    override func viewDidLoad() {
        super.viewDidLoad()
        refreshControl.addTarget(self, action: #selector(ViewController.refresh(sender:)), for: .valueChanged)
        collectionView.refreshControl = refreshControl
    }

    @objc func refresh(sender: UIRefreshControl) {
        // refresh処理
        // 完了したらUIRefreshControlのendRefreshing()を呼ばないとくるくるが終わらない
    }
}

これで実装完了。
くるくるの色を変えたい場合はUIRefreshControlのtintColorを、くるくるの下に文字を加えたい場合はattributedTitleを設定するとOK。

参考記事

dev.classmethod.jp www.cl9.info