μ΄μ μ ν¬μ€ν
ν UITableView, UITableViewCell, Protocols μ μ΄μ©ν΄μ μ±μ μ€μ λ‘ λ§λ€μ΄λ³Όκ²μ.
곡μλ¬Έμλ₯Ό λ³΄κ³ μ 리νλ λ΄μ©λ€μ΄λΌ μ΄λ ΅κ² μμ±νκ² κ°μμ μ€μ΅μΌλ‘ ν λ² λ νκΈ°νλ €κ³ ν©λλ€!
κ°λ° μμλ λ€μκ³Ό κ°μμ π
- Storyboard μμ TableView μΆκ°νκΈ°
- TableView λ΄μ TableCell κ΅¬μ± λ§λ€κΈ°
- CustomCell ν΄λμ€ λ§λ€κ³ μ°κ²°νκΈ°
- TableView Protocol μ€μνκΈ°
- μ± μ€ννκΈ°
1. Storyboard μμ TableView μΆκ°νκΈ°
μ€ν 리보λλ₯Ό μ΄μ©ν΄μ UI κ°λ°μ μ§ννκ³ μμ΅λλ€. TableView μ TableViewCell μ μΆκ°ν΄μ€λλ€!
2. TableView λ΄μ TableCell κ΅¬μ± λ§λ€κΈ°
Table View λ΄λΆμ Table View Cell μ μΆκ°ν΄μ£Όκ³ , Cell λ΄λΆμ Button, Label μ μΆκ°ν΄μ£Όμμ΄μ. Auto layout μ ν΅ν΄μ λ μ΄μμ μ‘°μ λ ν΄μ€ μνμ
λλ€.
μ¬κΈ°μ λ²νΌμ μμ€ν
μ΄λ―Έμ§λ₯Ό μ΄μ©νκ³ , Default μνμμλ circle, Selected μνμμλ checkmark.circle.fill λ‘ μ€μ νμ΄μ.
3. CustomCell ν΄λμ€ λ§λ€κ³ μ°κ²°νκΈ°
UITableViewCell μ μμλ°λ Custom Class λ₯Ό λ§λ€μ΄μ£Όκ³ , μ€ν 리보λμμ Cell μ inspector μμ μ§μ μ ν΄μ£Όμ΄μΌν©λλ€. TodoCell μ΄λΌλ μ΄λ¦μΌλ‘ λ§λ€μκ³ , μλ λ κ³³μ μμ±ν΄μ£Όλ©΄ λ©λλ€.
Custom Class λ UITableViewCell μ λ§λ κ²μ λν μ§μ μ΄κ³ , Identifier λ Cell μ μ¬μ¬μ©νκΈ° μν΄ μ¬μ©λλ μλ³μμ
λλ€.
μ€ν 리보λμμ Assistant λ‘ μ½λμ°½μ ν¨κ» μ΄μ΄μ, λ²νΌκ³Ό λΌλ²¨μ checkButtonκ³Ό todoLabel μΌλ‘ outlet μ λ§λ€μ΄μ€μλ€. λ°μ΄ν°λ₯Ό ν΅ν΄ κ° μ
μ Label μ μ§μ ν΄μ£ΌκΈ° μν¨μ
λλ€.
μ¬κΈ°μ checkButtonTapped method λ λ²νΌμ΄ λλ Έμ λ, λΌλμ€λ²νΌμ²λΌ 체ν¬κ° λκΈ° μν΄ λ²νΌμ isSelected μμ±μ΄ ν κΈλλλ‘ μ½λλ₯Ό μΆκ°νμ΅λλ€.
4. TableView Protocol μ€μνκΈ°
μ½λμμ ViewController κ° UITableViewDataSource νλ‘ν μ½μ μ€μνλ€λ κ²μ λͺ
μν΄μ€λλ€. μ΄μ κΈμμ μμ±νλ―μ΄, νμμΈ λ κ°μ ν¨μ tableView(_:numberOfRowsInSection:), tableView(_:cellForRowAt:) λ₯Ό μμ±νμ΅λλ€.
μ€μνμν ! μ€ν 리보λμμ TableView -> View Controller λ‘ μ»¨νΈλ‘€+λλκ·Έ νμ¬ dataSource, delegate λ₯Ό μ°κ²°ν΄μ€μΌν©λλ€.
tableView(_:numberOfRowsInSection:) λ νΉμ section μ νμν row μ κ°μλ₯Ό 묻λ method μ
λλ€. μ§κΈμ section μ΄ νλλ°μ μλ μμ μ΄λ―λ‘ todos 리μ€νΈμ κ°μλ₯Ό λ°ννμ΅λλ€.
tableView(_:cellForRowAt:) λ cell μ μ΄λ»κ² ννν μ§μ λν΄ λ¬»λ method μ
λλ€.
cell μ κ°μ Έμ€κΈ° μν λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
- tableView.dequeueReusableCell(withIdentifier: ) ν¨μλ₯Ό ν΅ν΄μ TodoCell μ κ°μ Έμ΅λλ€.
- as? TodoCell μ ν΅ν΄μ TodoCell λ‘ λ€μ΄μΊμ€ν ν©λλ€.
- if let else ꡬ문μ ν΅ν΄μ λ€μ΄μΊμ€ν μ΄ λμ§ μμ κ²½μ°, λΉμ΄μλ UITableViewCell() μ λ°ννλλ‘ ν©λλ€.
- μ±κ³΅μ μΌλ‘ λ€μ΄μΊμ€ν μ΄ λμλ€λ©΄, cell μ TodoCell instance κ° λ©λλ€.
cell μ κ°μ Έμ¨ ν, λ°μ΄ν°λ₯Ό ν΅ν΄ cell μ update νκΈ° μν λ°©λ²μ λλ€.
- indexPath λ section, row κ°μ κ°μ§λ―λ‘, row λ₯Ό index μ ν λΉν΄μ€λλ€.
- 미리 λ§λ€μ΄λ todos 리μ€νΈμ index μ ν΄λΉνλ κ°μ todoLabel.text κ°μΌλ‘ ν λΉν΄μ€λ€.
cell μ update ν ν, cell μ λ°ννλ©΄ λ©λλ€!
5. μ± μ€ννκΈ°
λͺ¨λ μλ£ν μνμμ μ±μ μ€ννλ©΄ μ μμ μΌλ‘ ν
μ΄λΈλ·°κ° λνλλ©°, λ²νΌμ ν΅ν΄ 체ν¬ν μ μμ΅λλ€!
μ΄κ°λ¨ ν¬λ리μ€νΈμκΈ° λλ¬Έμ, Section λ μκ³ μμ λ λν
μΌ νμ΄μ§λ μμ§λ§ λμμ΄ λμ
¨μΌλ©΄ μ’κ² μ΅λλ€ :D
λ€μμ κΈμ μ
λ°μ΄νΈ νκ²λλ€λ©΄ row λ₯Ό μ€μμ΄νν΄μ μμ νλ κ²κΉμ§ μ
λ°μ΄νΈ ν΄λ³Όκ²μ!
μ°Έκ³ λ¬Έμ
- [iOS] TableView μ κΈ°μ΄ :: UITableView, UITableViewCell
- [iOS] TableView λ₯Ό μν Protocol :: Datasource, Delegate
- λμμΈμ μΈ μμ(λ²νΌ)μ ν¨μΊ κ°μλ₯Ό μ°Έκ³ νμ΅λλ€.
μΆμ² κ°μ΄λ
- https://developer.apple.com/tutorials/app-dev-training/getting-started-with-today
- μ±κ°λ° μ νμν λ΄μ©λ€μ λλΆλΆ λ΄κ³ μλ μμ μ λλ€. μ±κ°λ° μ΄λ°μ΄λΌλ©΄ μΆμ²λλ €μ!