Pull to refresh in UICollectionView in ViewController Pull to refresh in UICollectionView in ViewController ios ios

Pull to refresh in UICollectionView in ViewController

New swift code changed in calling action method you could do rewrite like this

@IBOutlet weak var collectionView: UICollectionView!var refresher:UIRefreshControl!override func viewDidLoad() {   super.viewDidLoad()    self.refresher = UIRefreshControl()    self.collectionView!.alwaysBounceVertical = true    self.refresher.tintColor = UIColor.red    self.refresher.addTarget(self, action: #selector(loadData), for: .valueChanged)    self.collectionView!.addSubview(refresher)}func loadData() {   self.collectionView!.refreshControl.beginRefreshing()   //code to execute during refresher       .       .       .   stopRefresher()         //Call this to stop refresher }func stopRefresher() {   self.collectionView!.refreshControl.endRefreshing() }

var refreshControl:UIRefreshControl!override func viewDidLoad() {    super.viewDidLoad()      self.refreshControl = UIRefreshControl()      self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")     self.refreshControl.addTarget(self, action: #selector(PricingPlansCollectionViewController.reload), for: .valueChanged)      collectionView!.addSubview(refreshControl)} func refresh(sender:AnyObject)  {    //DO   }

Swift 5 solution

As @fishspy already mentioned, that's the way to put your collection view inside a view controller, but I'm gonna share also how to connect your refresh control to the collection view in a cleaner way.

Since iOS 10 there's a dedicated property for the refresh control. Apart of that, I'd also recommend to directly initialise your refresh control as a property, declaring it private and doing the following things:

@IBOutlet private weak var collectionView: UICollectionView!private let refreshControl = UIRefreshControl()override func viewDidLoad() {    super.viewDidLoad()    refreshControl.addTarget(self, action: #selector(didPullToRefresh(_:)), for: .valueChanged)    collectionView.alwaysBounceVertical = true    collectionView.refreshControl = refreshControl // iOS 10+}@objcprivate func didPullToRefresh(_ sender: Any) {    // Do you your api calls in here, and then asynchronously remember to stop the    // refreshing when you've got a result (either positive or negative)    refreshControl.endRefreshing()}