[swift] UIRefreshControlで引っ張って更新を実装

目次

UIRefreshControlで引っ張って更新を実装

サンプルコード:

var refreshControl:UIRefreshControl!

  override func viewDidLoad()
    {
        super.viewDidLoad()

        self.refreshControl = UIRefreshControl()
        self.refreshControl.attributedTitle = NSAttributedString(string: "to update") //インジケータの下に文字を挿入
        self.refreshControl.addTarget(self, action: "reload", forControlEvents: UIControlEvents.ValueChanged)
        self.tableView.addSubview(refreshControl)
    }

   func reload()
  {
     // 更新コード(self.tableview.reloadData()など)
  }

   func didReload()
  {
     refreshControl.endRefreshing() //インジケータを終了する
  }
 

Swift4版

Swift4ではtableViewやCollectionViewに機能として追加されている

tableView

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


@objc func refresh(sender: UIRefreshControl) {
  //リロードなどの処理
 }

読み込み終了後にインジケータなどを停止させたい場合は、読み込み完了箇所に

refreshControl.endRefreshing() //インジケータを終了する

を呼び出す。

 

CollectionView

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


@objc func refresh(sender: UIRefreshControl) {
  //リロードなどの処理
 }

読み込み終了後にインジケータなどを停止させたい場合は、読み込み完了箇所に

refreshControl.endRefreshing() //インジケータを終了する

を呼び出す。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です