UITableViewに下に引っ張るどリロードする実装を試してみました。
こちらはUIRefreshControlというクラスを使います。
UITableViewへのリロード処理の追加
実装は非常に簡単で、UIRefreshControlをUITableViewにaddSubviewするだけです。
class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() let refreshControl = UIRefreshControl() tableView.addSubview(refreshControl) } }
これを実装して下に引っ張ると下のようにローディング表示されます。
下に引っ張った時のコールバックメソッドはvalueChangedイベントを使って設定します。
class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: #selector(ViewController.refreshControlValueChanged(sender:)), for: .valueChanged) tableView.addSubview(refreshControl) } func refreshControlValueChanged(sender: UIRefreshControl) { print("テーブルを下に引っ張った時に呼ばれる") } }
処理が終わったら、UIRefreshControlのendRefreshingメソッドを呼んでインジケータを非表示にします。
func refreshControlValueChanged(sender: UIRefreshControl) { DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: { sender.endRefreshing() }) }
UIRefreshControlのカスタマイズ
UIRefreshControlはインジケータの色変更とテキスト追加ができます。
let refreshControl = UIRefreshControl() refreshControl.tintColor = UIColor.blue refreshControl.attributedTitle = NSAttributedString(string: "てきすと")
表示は下の通りです。