ios
[ios - Swift] RefreshControl 사용하기
POKY_0908
2020. 11. 22. 15:49
이번 시간에는 UITableView의 cell을 아래로 드래그 시 데이터를 Refresh 할 수 있도록 해보겠습니다.
1. UIRefreshControl
사용자가 스크롤 가능한 콘텐츠 영역의 상단을 아래로 드래그하면 스크롤 뷰에 새로 고침 컨트롤이 표시되고 진행률 표시기에 애니메이션을 적용하고 앱에 알립니다.
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(refreshWork), for: .valueChanged)
mTableView.addSubview(refreshControl)
RefreshControl을 스크롤이 가능한 인터페이스에 Subview로 등록합니다.
selector: valueChage 발생 시 호출될 함수입니다.
for: 작업 메서드가 호출되는 컨트롤 관련 이벤트 비트 마스크입니다.
valueChange: 컨트롤을 드래그하거나 조작하여 일련의 다른 값을 방출하도록 하는 터치입니다.
@objc func refreshWork() {
refreshControl.beginRefreshing()
strArray.insert("New Data - 0", at: 0)
strArray.insert("New Data - 1", at: 1)
strArray.insert("New Data - 2", at: 2)
strArray.insert("New Data - 3", at: 3)
refreshControl.endRefreshing()
mTableView.reloadData()
}
beginREfreshing, endRefreshing는 Refresh의 시작과 끝을 알립니다.
Refresh가 발생하면 StrArray에 새로고침 될 데이터를 등록하고 실행 결과를 보도록 하겠습니다.
아래는 전체 소스입니다.
class RefreshViewController: UIViewController {
@IBOutlet weak var mTableView: UITableView!
var strArray = Array<String>()
let refreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
for i in 0..<20 {
strArray.append("Data Row - \(i)")
}
mTableView.delegate = self
mTableView.dataSource = self
refreshControl.addTarget(self, action: #selector(refreshWork), for: .valueChanged)
mTableView.addSubview(refreshControl)
}
@objc func refreshWork() {
refreshControl.beginRefreshing()
strArray.insert("New Data - 0", at: 0)
strArray.insert("New Data - 1", at: 1)
strArray.insert("New Data - 2", at: 2)
strArray.insert("New Data - 3", at: 3)
refreshControl.endRefreshing()
mTableView.reloadData()
}
}
extension RefreshViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return strArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "\(strArray[indexPath.row])"
return cell
}
}