์ค๋์ ๋ฉ์ธํ๋ฉด๊ณผ TableView์ Pull to refresh ( ๋น๊ฒจ์ ์๋ก๊ณ ์นจ ) ๋ฅผ ์ ์ฉํด ๋ณด์์ต๋๋ค.
UIRefreshControl
UIRefreshControl
๋ Table View
์ Collection View
๊ฐ ์์๋ฐ๊ณ ์๋ UIScrollView
์ ์ฐ๊ฒฐํ๋ ํ์ค Control์
๋๋ค. Content๋ฅผ ์๋ก๊ณ ์นจํ ์ ์๋ Control๋ฅผ ์ ๊ณตํ๋ object์
๋๋ค. ์ฌ์ฉ์๊ฐ ์คํฌ๋กค์ด ๊ฐ๋ฅํ Content ์์ญ์ ์๋๋ก ๋๋๊ทธํ๋ฉด refresh control
์ด ํ์๋๊ณ , progress indicator
๊ฐ ์ ๋๋ฉ์ด์
ํ ๋์ด ์ฑ์ ์๋ ค์ค๋๋ค. ์ด ์๋ฆผ์ ์ฌ์ฉํด content๋ฅผ ์
๋ฐ์ดํธํ๊ฑฐ๋ refresh control
์ ๋ฌด์ํ ์ ์์ต๋๋ค.
Target-action ๋ฉ์ปค๋์ฆ
UIRefreshControl
์ target-action ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ Content๋ฅผ ์
๋ฐ์ดํธํ ์ ์๋ ์๊ธฐ๋ฅผ ์๋ ค์ฃผ๋๋ฐ์! ํด๋น ๊ธฐ๋ฅ์ด ํ์ฑํ๋์์ ๋, @objc๋ก ๊ตฌ์ฑ๋ selector
ํจ์๋ฅผ ํธ์ถํ์ฌ Content๋ฅผ ์
๋ฐ์ดํธํ๊ณ ์๋ฃ๊ฐ ๋๋ฉด endRefreshing()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ข
๋ฃํฉ๋๋ค.
func configureRefreshControl () {
// Add the refresh control to your UIScrollView object.
myScrollingView.refreshControl = UIRefreshControl()
myScrollingView.refreshControl?.addTarget(self, action:
#selector(handleRefreshControl),
for: .valueChanged)
}
@objc func handleRefreshControl() {
// Update your content…
// Dismiss the refresh control.
DispatchQueue.main.async {
self.myScrollingView.refreshControl?.endRefreshing()
}
}
์๋ ์ ํ ๊ณต์ ํํ์ด์ง์์ ์ ๊ณต๋ ์ฝ๋์ ๋๋ค! ์๋ฅผ ์ฐธ๊ณ ํด์ ๊ตฌํํ์ด์!
Main ํ๋ฉด์ UIRefreshControl ์ ์ฉํ๊ธฐ
๋จผ์ RefreshCotrol์ ์ค์ ํด ์ค ScrollView๋ฅผ VC๊ณผ ์ฐ๊ฒฐํด ์ค๋๋ค!
@IBOutlet weak var scrollView: UIScrollView!
RefreshControl๋ฅผ ์ค์ ํ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ด๋ฆ๊ณผ ๊ฐ์ด ๋ณํ๋์์ ๋, ์คํ๋ ํจ์๋ฅผ ์ ์ํด ์ฃผ์์ด์!
override func viewDidLoad() {
super.viewDidLoad()
setRefreshControl()
}
// MARK: - refreshControl
func setRefreshControl() {
scrollView.refreshControl = UIRefreshControl()
scrollView.refreshControl?.attributedTitle = NSAttributedString(string: "Pull to refresh")
scrollView.refreshControl?.addTarget(self,
action: #selector(self.refresh(_:)),
for: .valueChanged)
}
@objc func refresh(_ sender: AnyObject) {
DispatchQueue.main.asyncAfter(deadline: .now()+1){
self.setRandomID()
self.setDataAndLabel()
self.scrollView.refreshControl?.endRefreshing()
}
}
์๋ก๊ณ ์นจํ์ ๋, ๋ฐ์ดํฐ๊ฐ ๋ณํ๋๊ธฐ ์ํด์ randomID๋ฅผ ์์ฑํ๋ setRandomID ํจ์๋ฅผ ์คํํด ์ฃผ๊ณ ํด๋น data๋ก ๋ค์ UI๋ฅผ ๊ทธ๋ฆฌ๋ setDataAndLabel ํจ์๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์์ผ ์ค๋๋ค!
์ด๋, ์๋ก๊ณ ์นจ ์ํ๊ฐ ์ ์ ์ ์ง๋์์ผ๋ฉด ํด์ โญ๏ธ asyncAfter(deadline: (์๊ฐ))
์ ์ฌ์ฉํ์ฌ ์๊ฐ์ 1์ด ์ ๋ ์ ์ง์์ผ ์ฃผ์์ด์!
์คํํ๋ฉด
TableViewController์ UIRefreshControl ์ ์ฉํ๊ธฐ
TableViewController์๋ ์์ฒด์ ์ผ๋ก tableView๊ฐ ์ ์๊ฐ ๋์ด์๊ธฐ ๋๋ฌธ์ VC์ ์ฐ๊ฒฐ์ ๋ฐ๋ก ํด์ฃผ์ง ์์๋ ๋ฉ๋๋ค!
override func viewDidLoad() {
super.viewDidLoad()
setRefreshScroll()
}
func setRefreshScroll() {
tableView.refreshControl = UIRefreshControl()
tableView.refreshControl?.addTarget(self, action: #selector(refresh(_:)), for: .valueChanged)
}
@objc func refresh(_ sender: AnyObject) {
DispatchQueue.main.asyncAfter(deadline: .now()+1) {
self.tableView.refreshControl?.endRefreshing()
self.tableView.reloadData()
}
}
์์ ๋๊ฐ์ด ์ ์ฉํด ์ฃผ์์ต๋๋ค.
TableView์๋ ๋ฐ๋ก attributedTitle๋ฅผ ์ค์ ํด์ฃผ์ง ์์์ต๋๋ค~!
๋ํ TableView์ ๋ฐ์ดํฐ๋ฅผ ์๋กญ๊ฒ ๊ทธ๋ฆฌ๊ธฐ ์ํด์ tableView.reloadData()๋ฅผ ์ฌ์ฉํด ์ฃผ์์ด์!
์ ๋ ๋ถ๋ช
endRefreshing()
์ ํด์ฃผ์๋๋ฐ, refresh ์ ๋๋ฉ์ด์
์ด ๋ฉ์ถ์ง ์๊ณ ๋ฐ๋ณต์ ์ผ๋ก ๋์๊ฐ๋ ์ค๋ฅ๊ฐ ์์์ต๋๋ค.
์๊ณ ๋ณด๋ ์ ๊ฐ .valueChanged
๋์ ์ .allEditingEvents
๋ฅผ ๋ฃ์ด๋์๋๋ผ๊ตฌ์..ใ
ใ
.valueChanged
: ์ฌ์ฉ์๊ฐ ์ปจํธ๋กค์ ๊ฐ์ ๋ณ๊ฒฝํ์ ๋ ๋ฐ์ (UIRefreshControl
์์๋ ์ฌ์ฉ์๊ฐ ํ๋ฉด์ ์๋๋ก ๋๋๊ทธํ๋ ๋ชจ์ ์์ฒด๊ฐ ์ปจํธ๋กค ๊ฐ์ด ๋ณํ๋ ๊ฒ ).allEditingEvent
: textField๋ ๋ค๋ฅธ ์ ๋ ฅ ํผ ์์์์ ๋ฐ์ํ๋ ๋ชจ๋ ํธ์ง ๊ด๋ จ ์ด๋ฒคํธ๋ฅผ ํฌ๊ดํจ ( ์ ์ด์UIRefreshControl
๊ณผ๋ ๊ด๋ จ์ด ์์ด์ ๋ฌดํ ์คํ์ด ๋์๋ ๊ฒ ) ์ฆ, ํ ์คํธ ํธ์ง๊ณผ ๊ด๋ จ๋ ์ปจํธ๋กค์์ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๊ฐ์งํ ๋ ์ฌ์ฉ
์ฌ๋ฌ๋ถ๋ค์ ์ ํ์ธํ์ธ์!!
์คํํ๋ฉด