iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Swift】UIRefreshControl をコードからリフレッシュさせる

本日は UITableViewUICollectionView に追加した UIRefreshControl をコードからリフレッシュさせる方法を紹介したいと思います🦅

結論

基本的には UIRefreshControlbeginRefreshing() を呼び出すことで、リフレッシュの UI は表示されているのですが、UITableViewUICollectionView など UIScrollView のサブクラスにアタッチされている UIRefreshControl の場合は、オフセットを調整しなければユーザに見える形でリフレッシュさせることはできません。ということで下記がそれらを解決した UIRefreshControlExtension になります。

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.
    }

という感じで本日も以上になります👋

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com