(iOS) ํ ์ด๋ธ ๋ทฐ (TableView)
- -
TableView
TableView์ ๋ฐ์ดํฐ ํํ ๋ฐฉ์
TableView๋ ํ๋ฉด์ ์ผ๋ก๋ ๋จ์ํ ๋ชฉ๋ก ํํ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํ์ํด์ฃผ๋ ์ญํ ์ ํ๋ค. ํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก ๋ณด๋ฉด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋ ์ฝํ ์ธ ์ ์์ ์นดํ ๊ณ ๋ฆฌ๋ค์ ์ ๋ ฌํ์ฌ ํํํด์ฃผ๋ฉฐ, ๊ทธ ์์์ ์ฌ์ฉ์๊ฐ ์ํ๋ ํญ๋ชฉ์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๋์์ค๋ค.
๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ์ ํ ์ด๋ธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ๊ณ์ธต์ ์ฑ๊ฒฉ์ ์ฝํ ์ธ ๋ฅผ ํํํ๊ธฐ์ ์๋ง๊ณ , ์๋ก ์ํธ ๋ณด์์ ์ธ ์ญํ ์ ํ๊ฒ ๋๋ค. ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ ์์ง์ ์ธ ์ ๋ณด๋ค์ ์ง๋ ฌ๋ก ํํํ๋ฉฐ, ํ ์ด๋ธ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์ํ์ ์ธ ์ ๋ณด๋ค์ ๋ณ๋ ฌ๋ก ๋ฐฐ์ดํ๊ฒ๋๋ค.
TableView์ ๊ณ์ธต๊ตฌ์กฐ
- TableView Controller
- ViewController๋ฅผ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ง ํน์ํ ์ปจํธ๋กค๋ฌ์ด๋ค.
- ํ๋ฉด ์ ์ฒด๋ฅผ ๋ชฉ๋กํ์์ผ๋ก ๋ํ๋ผ๋ ์ฌ์ฉ๋๋ค.
- ํ๋์ ์ฌ์ ํ๋์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ํ๋ค. ๋ฐ๋ผ์ TableViewController๊ฐ ์์ผ๋ฉด ViewController๋ ํ์๊ฐ ์๋ค.
- Table View
- TableViewController์ ๋ฃจํธ ๋ทฐ์ด๋ค. ๋ชฉ๋ก ํ์์ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ View์ด๋ค.
- ์ผ๋ฐ ViewContorller์ TableView๊ฐ์ฒด๋ง ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ ๋ ์๋ค.
- Table View Cell
- Table View๋ ๋ชฉ๋ก์ ๊ตฌ์ฑํ๋ ๊ฐ์ฒด์ด๊ณ , Table View Cell์ ๋ชฉ๋ก ์์ ๋ค์ด๊ฐ ํ๋ค์ ๊ตฌ์ฑํ๋ ๋ทฐ์ด๋ค.
- Content View
- Cell(ํ๋ํ๋์ ํ) ๋ด๋ถ์ ๋ค์ด๊ฐ ์ฝํ ์ธ ๋ฅผ ๋ด๋นํ๋ Veiw์ด๋ค.
Prototype Cell
Cell์ ์ฝ๊ฒ ๋์์ธํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ํ๋ง ์ ๊ณตํด์ฃผ๊ณ , ๋ด๋ถ์ ๋ฒํผ์ด๋ ํ ์คํธ ๋ ์ด๋ธ๋ฑ์ด ๊ณต๊ฐ์ ์ฐจ์งํ์ง ์๋๋ค.
์ผ์ชฝ์ Title ๋ ์ด๋ธ์ด ์ฐจ์งํ๋ ๊ณต๊ฐ์ด Cell Content์์ญ์ด๊ณ , ์ค๋ฅธ์ชฝ์ ๋ฒํผ์ด ์๋ ๋ถ๋ถ์ Accessory View๋ผ๊ณ ํ๋ค.
ํ์ค ํธ์ง ์ธํฐํ์ด์ค
์ฝ์ฝ์ ํฐ์น ํ๋ ์์ํฌ์๋ ํ๋กํ ํ์
์
์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ํ์ค ํธ์ง ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. ์ค๋ฅธ์ชฝ์ ์๋ Reordering Control
์ ํตํด ์์๋ฅผ ์ ๋ ฌํ ์ ์๊ณ , ์ผ์ชฝ์ Editting Control
์์ญ์ ๋ฒํผ์ ํตํด ์ญ์ ํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
DataSource
TableVeiw์ ๋ฐ์ดํฐ ํํ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค. ์ ์ ํ์ , ๋์ ํ์ .
ํ ์ด๋ธ ๋ทฐ๋ฅผ ํตํด ํํํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ๋งค๋ฒ ๊ฐฑ์ ๋๋ ๋์ ์ธ ํ์ ์ด๋ผ๋ฉด, Dynamic Prototypes๋ฅผ ์ ํํด์ผํ๋ฉฐ, dataSource๊ฐ ํ์ํ๋ค. dataSource์ ํ ์ด๋ธ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ณผ์ ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด๋ผ๊ณ ํ๋ค.
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ (TableView์ DataSource ์ฐ๊ฒฐ)
UITableViewDataSource
๋ผ๋ ํ๋กํ ์ฝ์ ์์กดํ์ฌ ์ฐ๋๋๋ค. ์๋์ ๋๊ฐ์ง ๋ด์ฉ์ ํ์ ๋ฉ์๋๋ฅผ ํตํด ๋ํ๋ธ๋ค.
- TableViewController๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋์ผ๋ก ๋ฉ์๋๊ฐ ํด๋์ค๋ด๋ถ์ ์ถ๊ฐ๋์ด์๋ค.
- ViewController์์
extension
๋ฉ์๋๋ฅผ ํตํดUITableViewDelegate
UITableViewDataSource
๋ฅผ ํด์ฃผ๋ฉด ๋นจ๊ฐ ๊ฒฝ๊ณ ๋ฒํผ์ด ๋จ๋๋ฐ, ๋๋ฌ์ฃผ๋ฉด ์๋์ผ๋ก ์ถ๊ฐ๋๋ค.
- ํ
์ด๋ธ์ด ๋ช ๊ฐ์ ํ์ผ๋ก ๊ตฌ์ฑ๋๋๊ฐ? ->
tableView(_:numberOfRowInSection:)
- ํ ์ด๋ธ ๋ทฐ๊ฐ ์์ฑํด์ผ ํ ์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
- ์ด ๋ฉ์๋๋ฅผ ํตํด ์์คํ ์ ๋ช๊ฐ์ ํ์ ์์ฑํ ์ง ์ ํ๋ค.
- ํ
์ด๋ธ๋ทฐ์ ๊ฐ ์
์ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๋๊ฐ? ->
tableView(_:cellForRowAt:)
- ์ ํ๋ํ๋์ ๋ํด ๊ณ์ ํธ์ถ๋๊ฒ ๋๋ค.
- ์ ๋ด๋ถ์ ๋ค์ด๊ฐ ์ฝํ ์ธ ๋ฅผ ๊ตฌ์ฑํ๊ณ , ๊ทธ๊ฒ์ ๋ฐํํ๋ค. (์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค)
์ฌ์ฉ์ ์ก์ ์ฒ๋ฆฌ ๋ฉ์๋
tableView(_:didSelectRowAt:)
๋ฉ์๋๋ ์ฌ์ฉ์๊ฐ ํ
์ด๋ธ ๋ทฐ์์ ํน์ ์
์ ํฐ์นํ์๋ ํธ์ถ๋๋ค.
์ฆ, ํน์ ์
์ ์ ํํ์๋ detail ๋ด์ฉ์ ํ์ํ๋ ํ๋ฉด์ผ๋ก ์ ํํ๋ค๊ฑฐ๋ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ๋ ํ์ํ ๋ฉ์๋์ด๋ค. ๋ช ๋ฒ์งธ ์
์ ์ ํํ๋์ง indexPath
์ .row
๋ฅผ ํตํด ์ ์ ์๊ณ , ์ด ๋ฉ์๋ ๋ด๋ถ์ ์
์ ํ์ ๋์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด ๋๋ค.
ReusableCell
iOS์์คํ ์ ์ ๋ง์ ํ ์ด๋ธ ๋ทฐ์ ์ ์๋ํ ๊ฐ์ฒด๋ค์ ์ผ์ผ์ด ๋ค ๋ง๋ค์ง ์๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๊ธฐ ์ํด, ๋น์ฅ์ ํ๋ฉด์ ํ์๋ ๋งํผ๋ง ์ ์ ์์ฑํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ธ ์ฌ์ฌ์ฉ ํ๋ฅผ ๋ง๋ค์ด ๋๊ณ ํ์ํ ๋ ๊บผ๋ด์ด ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์๊ฐ ์์ด์ง ์ ์ ๋ค์ ์ฌ์ฌ์ฉ ํ์ ์ ์ฅ๋๋ค.
์ฆ, ์ฝ๋์ ํจ๊ป ๋งํ์๋ฉดdequeueReusableCell(withIdentifier:)
๋ฉ์๋๊ฐ ํธ์ถ ๋์์๋ ์
๋ ฅ๋ ์์ด๋์ ๋ง๋ ์ธ์คํด์ค๊ฐ ์ฌ์ฌ์ฉ ํ์ ์ ์ฅ๋์ด ์๋ค๋ฉด ์ธ์คํด์ค๋ฅผ ๊บผ๋ด์ด ์ฌ์ฌ์ฉํ๊ณ , ์๋ค๋ฉด ์๋ก ์์ฑํ์ฌ ์ ๊ณตํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
ํ๋กํ ํ์ ์ ์ ๊ฐ์ฒด ์ ์ดํ๊ธฐ
ํ๋กํ ํ์ ์ ์ ์ ๋ด๋ถ์ ์๋ ๋ ์ด๋ธ, ์ด๋ฏธ์ง ๋ทฐ ๋ฑ์ ํ๋ฉด์์๋ฅผ ์์ค์ฝ๋์์ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง์ด๋ค.
(1) Tag๊ฐ ์ฌ์ฉํ๊ธฐ viewWithTag(_:)
- ์ ์๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๊ด๋ฆฌ๊ฐ ์ด๋ ต๋ค
- ๊ตฌํ์ด ์ฝ๋ค. ์ดํธ๋ฆฌ๋ทฐํธ ์ธ์คํํฐ์์ Tag๋ฒํธ๋ฅผ ๋ถ์ฌ์ค ๋ค์ ์์ค์ฝ๋์์
cell.viewWithTag(<ํ๊ทธ๋ฒํธ>)
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ฐธ์กฐํ ์ ์๋ค. cell.viewWithTag
๋ฉ์๋๋ ๋ฐํํ์ ์ด UIView์ด๋ฏ๋ก, ํด๋น ๊ฐ์ฒด์ ํด๋์ค๋ก ๋ค์ด์บ์คํ ํด์ฃผ์ด์ผํ๋ค. ์๋ฅผ๋ค์ด label ์ด๋ผ๋ฉด<์ฐธ์กฐํ ๊ฐ์ฒด> as? UILabel
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
let label = cell.viewWithTag(10) as? UILabel
label?.text = dataSet[indexPath.row]
return cell
}
}
์์๋ ๋ณ์ ์ฐ๊ฒฐํ์ฌ ์ฐธ์กฐํ๊ธฐ (์ปค์คํ ํด๋์ค ๊ตฌํํ๊ธฐ)
- ํ๋กํ ํ์ ์ ์ ์ ์ดํ ์ปค์คํ ํด๋์ค๋ฅผ ๊ตฌํํด์ผํ๋ค.
- 1๋ฒ ๋ณด๋ค ๊ตฌํ์ด ์ด๋ ต์ง๋ง, ์ถํ ๊ด๋ฆฌ๋ ๋ ํธํ๋ค.
- ํด๋์ค ํ์ผ์ ์์ฑํด์ค๋ค.
import UIKit
class TableViewCell: UITableViewCell {
@IBOutlet weak var imgView: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var priceLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
- ์คํ ๋ฆฌ๋ณด๋์ ์ ์์ ๋ฐฉ๊ธ ์์ฑํ ํด๋์คํ์ผ์ ์ง์ ํ์ฌ ์ฐ๊ฒฐํด์ค๋ค.
- ์คํ ๋ฆฌ๋ณด๋์์ ์ ์ ๊ฐ์ฒด๋ค์ ์์๋ ๋ณ์๋ก ์ฐ๊ฒฐํด์ค๋ค. (๋น์ฐํ ๋ฐฉ๊ธ๋ง๋ ์ปค์คํ ์ ํด๋์ค์)
- ViewController ํ์ผ๋ก ๋์๊ฐ์,
tableView(_:cellForRowAt:
๋ฉ์๋์์ cell์ ์ ์ธํ๋ ๋ถ๋ถ์ ๋ฐฉ๊ธ ์์ฑํ ์ปค์คํ ์ ํด๋์ค๋ก ๋ค์ด์บ์คํ ์ ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ํจ์ ๋ด๋ถ์ ๋ ์ด๋ธ ๋ฑ ๊ฐ View์ ๋ํ ์์ฑ์ ์์ฑํ๋ฉด๋๋ค.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = pizzaTableView.dequeueReusableCell(withIdentifier: "pizzaCell") as! TableViewCell
cell.nameLabel.text = "PIZZA"
return cell
}
'๐ฑ iOS > -- UIKit' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
-
(iOS) ๋คํธ์ํฌ ํต์ , RESTful API , SOAP , JSON , XML 2021.08.05
-
(iOS) - ์๋๋ฐ์ค (SandBox), chroot ๋? 2021.08.04
-
(iOS) ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ํตํด ์ด์ ํ๋ฉด์ ๊ฐ ์ ๋ฌํ๊ธฐ (Delegate , Protocol) 2021.07.31
-
(iOS) ์๋ฆผ์ฐฝ, ์ก์ ์ํธ , ๋ก์ปฌ ํธ์์๋ (UIAlertController , UserNotification) 2021.07.29
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค