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