μ¬μ©μ μ μ κ°λ₯ν νμΌλ‘ ꡬμ±λ λ¨μΌ μ΄μ λ°μ΄ν°λ₯Ό νμ
ν μ΄λΈ λ·°λ λ€μν κ°μ²΄λ€ κ°μ νλ ₯μΌλ‘ ꡬμ±λ¨
μ
(Cells)
: μ
μ 컨ν
μΈ μ μκ°μ μΈ ννμ μ 곡νκ³ , UIKitμμ μ 곡νλ κΈ°λ³Έ μ
μ μ¬μ©νκ±°λ μ±μ μꡬμ λ§κ² μ¬μ©μ μ μ μ
μ μ μν μ μμν
μ΄λΈ λ·° 컨νΈλ‘€λ¬ (Table view controller)
: μΌλ°μ μΌλ‘ UITableViewController κ°μ²΄λ₯Ό μ¬μ©νμ¬ ν
μ΄λΈ λ·°λ₯Ό κ΄λ¦¬ν¨. λ€λ₯Έ λ·° 컨νΈλ‘€λ¬λ μ¬μ©ν μ μμ§λ§, μΌλΆ ν
μ΄λΈ κ΄λ ¨ κΈ°λ₯μ μ¬μ©νλ €λ©΄ ν
μ΄λΈ λ·° 컨νΈλ‘€λ¬κ° νμν¨λ°μ΄ν° μμ€ κ°μ²΄ (Data source object)
: μ΄ κ°μ²΄λ UITableViewDataSource νλ‘ν μ½μ μ±ννκ³ ν
μ΄λΈμ λν λ°μ΄ν°λ₯Ό μ 곡λΈλ¦¬κ²μ΄νΈ κ°μ²΄ (Delegate object)
: μ΄ κ°μ²΄λ UITableViewDelegate νλ‘ν μ½μ μ±ννκ³ μ¬μ©μμ ν
μ΄λΈ λ΄μ©κ³Όμ μνΈμμ©μ κ΄λ¦¬data-driven
μμUITableViewDataSource
νλ‘ν μ½μ μ±νν κ°μ²΄)λ₯Ό μ¬μ©νμ¬ μ±μ λ°μ΄ν° λ° κ° λ°μ΄ν°λ₯Ό νλ©΄μ λ λλ§νλ λ° νμν λ·°λ₯Ό μ 곡ν¨row
κ³Ό μΉμ
section
μΌλ‘ ꡬμ±νμ¬ μ 리ν¨ν μ΄λΈ λ·°κ° νλ©΄μ λνλκΈ° μ μ, ν μ΄λΈ λ·°λ μ΄ ν(row)κ³Ό μΉμ (section)μ κ°μλ₯Ό μ§μ νλλ‘ μμ²ν¨
func numberOfSections(in tableView: UITableView) -> Int // Optional
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
var hierarchicalData = [[String]]()
override func numberOfSections(in tableView: UITableView) -> Int {
return hierarchicalData.count // μΉμ
μ κ°―μ
}
override func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return hierarchicalData[section].count // μΉμ
μμ νμ κ°―μ
}
row
μ λͺ¨μμ μ μν¨UITableViewCell
κ°μ²΄Prototype Cells
μμ±μ μ
λ°μ΄νΈ ν΄μΌν¨UIKit
μμ μ 곡νλ νμ€ μ€νμΌ μ€ νλλ₯Ό μ ννκ±°λ, μ¬μ©μ μ μν 컀μ€ν
μ€νμΌμ μ μν μ μμμ μ€νμΌμ μ¬μ©μ μ μλ‘ μ€μ νκ±°λ νμ€ μ μ€νμΌ μ€ νλλ‘ μ€μ κ°λ₯
- μ μ
Identifier
μμ±μ λΉμ΄ μμ§ μμ λ¬Έμμ΄μ ν λΉ- μ¬μ©μ μ μ μ μ κ²½μ°, μ μ λ·°μ μ μ½ μ‘°κ±΄μ μΆκ°
- μμ΄λ΄ν°ν° μΈμ€νν°μμ μ¬μ©μ μ μ μ μ ν΄λμ€λ₯Ό μ§μ
UITableViewCell
μ μλΈν΄λμ€λ₯Ό μ μνμ¬ ν΄λΉ λ·°λ₯Ό κ΄λ¦¬ν¨μμΈλ
- μμΈλ μ iOS κ°λ°μμ μΈν°νμ΄μ€ λΉλ
Interface Builder
μ μ½λλ₯Ό μ°κ²°νκΈ° μν΄ μ¬μ©λλ μμ±
tableView(_:cellForRowAt:)
λ©μλλ λΉ λ₯΄κ² μλ΅ν΄μΌ ν¨
tableView(_:cellForRowAt:)
λ©μλλ₯Ό λ€μκ³Ό κ°μ ν¨ν΄μΌλ‘ ꡬν
- ν μ΄λΈ λ·°μ
dequeueReusableCell(withIdentifier:for:)
λ©μλλ₯Ό νΈμΆνμ¬ μ κ°μ²΄λ₯Ό κ°μ Έμ΄- μ μ λ·°λ₯Ό μ¬μ©μμ μ± λ°μ΄ν°λ‘ ꡬμ±
- μ μ ν μ΄λΈ λ·°μ λ°ν
UITableViewCell
μλ ꡬμ±ν΄μΌ ν λ·°κ° ν¬ν¨λ μμ±μ΄ μμtableView(_:cellForRowAt:)
λ©μλλ₯Ό μ¬μ©νμ¬ ν
μ΄λΈμ λ°μ΄ν°λ₯Ό λ‘λνκ±°λ μκ°μ΄ μ€λ 걸리λ μμ
μ μννλ©΄ μλ¨βμ§μ λ μ¬μ¬μ© μλ³μμ λν μ¬μ¬μ© κ°λ₯ν ν μ΄λΈ λ·° μ κ°μ²΄λ₯Ό λ°ννκ³ , ν΄λΉ μ μ ν μ΄λΈμ μΆκ°νλ λ©μλ
func dequeueReusableCell(
withIdentifier identifier: String,
for indexPath: IndexPath
) -> UITableViewCell
identifier
: μ¬μ¬μ©ν μ
κ°μ²΄λ₯Ό μλ³νλ λ¬Έμμ΄μ΄κ³ , μ΄ λ§€κ°λ³μλ nilμ΄ μλμ΄μΌ ν¨indexPath
: μ
μ μμΉλ₯Ό μ§μ νλ μΈλ±μ€ κ²½λ‘. νμ λ°μ΄ν° μμ€ κ°μ²΄μμ μ 곡νλ μΈλ±μ€ κ²½λ‘λ₯Ό μ§μ ν΄μΌν¨. dequeueReusableCell
λ©μλλ ν
μ΄λΈ λ·°μμμ μ
μμΉμ λ°λΌ μΆκ° ꡬμ±μ μννκΈ° μν΄ μΈλ±μ€ κ²½λ‘λ₯Ό μ¬μ©ν¨UITableViewCell
: μ§μ λ μ¬μ¬μ© μλ³μμ μ°κ΄λ κ°μ²΄, dequeueReusableCell
λ©μλλ νμ μ ν¨ν μ
μ λ°νtableView(:cellForRowAt:)
λ©μλμμλ§ νΈμΆ ν΄μΌν¨dequeueReusableCell(withIdentifier:)
λ₯Ό μ¬μ© ν΄μΌν¨register(:forCellReuseIdentifier:)
λλ register(:forCellReuseIdentifier:)
λ©μλλ₯Ό μ¬μ©νμ¬ ν΄λμ€ λλ nib νμΌμ λ±λ‘ν μλ μκ³ , dequeueReusableCell
λ©μλλ₯Ό νΈμΆνκΈ° μ μ λ±λ‘ μμ
μ μνν΄μΌ ν¨μ€μ²©λ λ°°μ΄ νΈλ¦¬μμ νΉμ μμΉλ‘ μ΄λνλ λ° μ¬μ©λλ μΈλ±μ€ λͺ©λ‘
μ€μ²©λ λ°°μ΄ νΈλ¦¬
- λ°°μ΄ μμ λ€μ λ°°μ΄μ΄ μ€μ²©λμ΄ μλ λ°μ΄ν° ꡬ쑰λ₯Ό μλ―Έ
struct IndexPath
Property
- row : μΈλ±μ€ κ²½λ‘μ row κ°
- section : μΈλ±μ€ κ²½λ‘μ section κ°
πApple Docs: Table views
πApple Docs: Filling a table with data
πApple Docs: dequeueReusableCell(withIdentifier:for:)
πApple Docs: IndexPath