[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() //インジケータを終了する
を呼び出す。