iOS10でスクロールビューでRefresh Controlが使えるようになったみたいで、実装中のUITableViewControllerに追加してみました。
xcode9、swift4を使って実装してます。
import UIKit
class PostViewController: UITableViewController {
var posts: [Post] = []
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "最近の投稿"
// 投稿情報の取得
updatePostList(nil)
// リフレッシュコントローラー
refreshControl = UIRefreshControl()
// リフレッシュしたときに実行する関数を追加
refreshControl?.addTarget(self, action: #selector(PostViewController.refresh(_:)), for: .valueChanged)
}
@objc func refresh(_ sender: UIRefreshControl) {
// レスポンスが割と速かったので、2秒後にAPIからデータを取得する
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
// APIに接続してテーブルビューを更新
self.updatePostList(sender)
}
}
// APIからPOSTデータを取得
func updatePostList(_ sender: UIRefreshControl?) -> Void {
PostAPI.fetchAll(condition: condition, { errorOrPost in
// メインスレッドで実行
DispatchQueue.main.async {
// テーブルビューを更新
self.tableView.reloadData()
// リフレッシュだとsenderがあるので、リフレッシュ完了
if sender != nil {
sender?.endRefreshing()
print("refresh")
}
}
})
}
}
参考サイト:https://dev.classmethod.jp/smartphone/ios-10-support-refresh-control-in-all-scroll-views/