UMC iOS 4์ฃผ์ฐจ ์„ธ๋ฏธ๋‚˜ (10/10 ์›”์š”์ผ)

2022. 10. 11. 15:13ใ†UniversityMakeUsChallenge/UMCiOS

 

 

 

 

๊ฐ•์˜๋กœ ๋Œ€์ฒด

๋Šฆ์€ ์‹œ๊ฐ์— ์˜ฌ๋ผ์™€์„œ, ๋‹ค์Œ๋‚  ๋“ค์—ˆ๋‹ค.

Table view, Collection view -> Protocol

 

 

 

 

 

์ž…๋ ฅ์ด ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ : ์ •๊ทœ์‹ ํ™œ์šฉ (์ •๊ทœ์‹ ?!)
present ํ˜•์‹์œผ๋กœ ๋„์šฐ๋ฉด, root view ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š์•„, viewWillDisappear ํ˜ธ์ถœ ์•ˆ๋จ -> ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?
modal present ํ˜•์‹์„ fullScreen์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค! :)

 

 

๋ฏธ์…˜ ์ ๊ฒ€ ๋!

์˜ค๋Š˜์˜ ๋‚ด์šฉ ~

 

 

์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด -> ํ…Œ์ด๋ธ” ๋ทฐ, ์ฝœ๋ ‰์…˜ ๋ทฐ ์–ธ๊ธ‰๋๋‹ค.
6๊ฐœ์˜ view๋ฅผ ๊ฐ๊ฐ ๊ตฌํ˜„
200๊ฐœ ๋ชจ๋‘ ๋งค์ผ ๋ณ€๊ฒฝ? ๋„ˆ๋ฌด ๊ท€์ฐฎ๋‹ค + ๋ฐ์ดํ„ฐ์™€ UI ์š”์†Œ๊ฐ€ ๋งค์šฐ ๋งŽ์•„ ๋ฉ”๋ชจ๋ฆฌ๋„ ๋งŽ์ด ์žก์•„๋จน์Œ, ๋ ‰๋„ ๊ฑธ๋ฆผ

 

 

iOS ์„ค์ • ์•ฑ !

 

 

- ๋‚˜๋„ ๋ฐฅ๋จน์–ธ ์„ค์ • ํ™”๋ฉด ๊ตฌํ˜„ํ•  ๋•Œ table view ํ™œ์šฉํ•จ !

: Cell ๊ด€๋ จํ•˜์—ฌ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค..

- ์žฌ์‚ฌ์šฉ Queue : ๋’ค์—์„œ ์„ค๋ช…

- ๋™์ผํ•œ ๋‚ด์šฉ๋“ค์„ ๋‚˜์—ดํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

- ์„ค์ • ํ™”๋ฉด, ์นด์นด์˜คํ†ก ํ™ˆ ํ™”๋ฉด ๋“ฑ๋“ฑ

 

 

ํ…Œ์ด๋ธ”๋ทฐ์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค. ์›ํ•˜๋Š” ํ™”๋ฉด์— ๋งž๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.
cell์ด ๋ฐ˜๋ณต๋˜๋Š” ํ˜•ํƒœ์ด๋‚˜, table view๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์• ๋งคํ•จ
๋‹จ์ˆœ ๋ชฉ๋ก / ๊ฒฉ์ž๋ฌด๋Šฌ. ํŽ˜์ด์ง€ ํ˜•ํƒœ

 

- Table view : swift option (๋ฉ”๋ชจ ์‚ญ์ œ, ์นด์นด์˜ค ์ฑ„ํŒ…๋ฐฉ ๋‚˜๊ฐ€๊ธฐ ๋“ฑ)

- Collection view : paging option (์–ดํ”Œ ์ƒ๋‹จ์˜ ๋ฐฐ๋„ˆ -> ํŽ˜์ด์ง€ ์Šค์™€์ดํ”„ ๊ฐ€๋Šฅ)

- ๋‘˜ ๋‹ค Scroll view๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค.

 

- table view๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ collection view๋กœ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

- ๋ฐ˜๋Œ€๋กœ collection view๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ table view๋กœ๋Š” ๊ตฌํ˜„์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. 

- collection view์˜ ๋Œ€์ฒด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. (๋ฉ˜ํ† ๋ถ„์˜ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์œผ๋กœ ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ)

 

 

swift ๋Š” protocol ์ง€ํ–ฅ ์–ธ์–ด์ด๋‹ค! (WWDC)

 

 

- ํ”„๋กœํ† ์ฝœ์€ ๋ฉ”๋‰ด์–ผ์ด๋‹ค.

- ํ”„๋กœํ† ์ฝœ์€ ์ฒญ์‚ฌ์ง„์ด๋‹ค. (์‹ค์งˆ์ ์ธ ๊ตฌํ˜„์€ ํ•˜์ง€ ์•Š์Œ)

: ๊ฐ€์ด๋“œ๋ผ์ธ (์ตœ์†Œ ์š”๊ตฌ์‚ฌํ•ญ) -> ์ฑ„ํƒํ•œ๋‹ค๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

- ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒ -> ๋งค๋‰ด์–ผ ์ด๋ฆ„์„ ์ •์˜ํ•˜๊ณ , ๋‚ด๋ถ€ ํ•จ์ˆ˜์˜ ์„ธ๋ถ€ ๊ตฌํ˜„์„ ํ•ด์•ผํ•œ๋‹ค. 

 

 

 

 

 

 

- protocol delegate pattern

- table view & collection view ๊ตฌํ˜„

- protocol design pattern

: ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ๋ทฐ์™€ ๋ทฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์ฃผ๋Š” ํŒจํ„ด

: Swift์— ๊ตญํ•œ๋œ ๋””์ž์ธ ํŒจํ„ด์ด ์•„๋‹ˆ๋‹ค.

 

 

 

root -> ์ž์‹๋ทฐ๋กœ ๋„˜์–ด๊ฐ€์„œ ํ…์ŠคํŠธ ์ž…๋ ฅ -> ์ž์‹๋ทฐ๊ฐ€ ๋‹ซํž ๋•Œ, ํ•ด๋‹น ๊ฐ’์„ ๋ฐ›์•„์™€์„œ ๋ถ€๋ชจ ๋ทฐ์˜ ๋ผ๋ฒจ์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ์ƒํ™ฉ์„ ๊ตฌํ˜„ !

 

ํ™”๋ฉด ์ „ํ™˜๊นŒ์ง€ ๊ตฌํ˜„

 

ํ”„๋กœํ† ์ฝœ์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ• 1. ํ”„๋กœํ† ์ฝœ(๋งค๋‰ด์–ผ)์˜ ์ด๋ฆ„์„ ์ •ํ•˜๊ณ  2. ๋“ค์–ด๊ฐ€์•ผ ํ•  ์ตœ์†Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ ๋Š”๋‹ค. (ํ•จ์ˆ˜์˜ ์ด๋ฆ„๊ณผ parameter, type ๊นŒ์ง€๋งŒ!)

protocol labelChangeProtocol {
    func onChange(text: String)
}

 

protocol์˜ ์ด๋ฆ„ : labelChangeProtocol

protocol์˜ ์ตœ์†Œ ์š”๊ตฌ์‚ฌํ•ญ: func onChange(text: String)

-> labelChangeProtocol ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋ฉด, onChange ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

firstViewController๊ฐ€ labelChangeProtocol ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒ -> onChange ๊ตฌํ˜„ (๋ผ๋ฒจ์˜ ํ…์ŠคํŠธ์— ์ž…๋ ฅ ๋ณ€์ˆ˜ text ๋Œ€์ž…)

 

 

- ์ด์ƒํ•˜๋‹ค? 

- text ๊ฐ’์„ ๋ฐ”๊พธ์–ด์ฃผ๋ ค๋ฉด onChange ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

- ๊ทผ๋ฐ ์ด text ๋ฐ์ดํ„ฐ๋Š” ์ž์‹ ๋ทฐ์˜ textfield์—์„œ ๋ฐ›์•„์™€์•ผ ํ•œ๋‹ค. 

-> ์ฆ‰, onChange ํ•จ์ˆ˜๋Š” ๋ถ€๋ชจ ๋ทฐ์—์„œ ํ˜ธ์ถœ X, ์ž์‹ ๋ทฐ์—์„œ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜์ด๋‹ค! 

: ์ด์ œ์•ผ ์ดํ•ด๊ฐ€ ์ œ๋Œ€๋กœ ๋œ๋‹ค !!! 

: ๋ถ€๋ชจ ๋ทฐ์—์„œ๋Š” ์ •์˜๋งŒ ํ•ด๋‘๋Š” ๊ฒƒ

 

 

 

 

Protocol Delegate Pattern

- Delegate๋Š” ๋ฌด์—‡์ธ๊ฐ€? -> ๋Œ€๋ฆฌ์ž, ์œ„์ž„์ž

- ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋ถ€๋ชจ๋ทฐ -> onChange ํ•จ์ˆ˜์˜ ์‹ค์ œ ์‚ฌ์šฉ์€ ์ž์‹ ๋ทฐ์—์„œ ํ•œ๋‹ค.

- ํ”„๋กœํ† ์ฝœ ์ฑ„ํƒ๊ณผ ๊ตฌํ˜„์€ ๋‹ค๋ฅธ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์—์„œ -> ์‚ฌ์šฉ์€ ๋‹ค๋ฅธ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋Œ€์‹  ํ•˜๋Š” ๊ฒƒ !

 

 

 

 

 

 

 

- ์ž์‹ ๋ทฐ์—์„œ ํ”„๋กœํ† ์ฝœ์„ delegate๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. (์˜ต์…”๋„ ํƒ€์ž…์œผ๋กœ)

- ๋ญ์ง€? ์™œ? ํ”„๋กœํ† ์ฝœ์„ ๋ฐ›์•„์˜ค๋Š” ๊ฑธ๊นŒ?

-> ํ”„๋กœํ† ์ฝœ ๋‚ด๋ถ€์— ์„ ์–ธ๋œ onChange๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์จ์•ผํ• ๊ฑฐ ์•„๋ƒ! 

 

- ์ž์‹ ๋ทฐ์—์„œ delegate๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ํ”„๋กœํ† ์ฝœ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

: ์ด๋•Œ, ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งŒ ์กด์žฌํ•˜๊ณ , ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Œ (๊ฐ’์„ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์€ ๊ฒƒ)

- ํ•ด๋‹น delegate๋Š” ๊ทธ๋Ÿผ ๋ญ”๋ฐ? 

-> ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋ถ€๋ชจ ๋ทฐ์˜ ํ”„๋กœํ† ์ฝœ! 

: ๋”ฐ๋ผ์„œ ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ๋ทฐ์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•จ! (self๋ฅผ ํ™œ์šฉํ•œ๋‹ค!!)

SecondViewController.delegate = self

 

์ž์‹๋ทฐ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์—, delegate ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

-> ์ž์‹๋ทฐ์˜ delegate (label change protocol)์€ ๋ถ€๋ชจ๋ทฐ๋‹ค (self๋‹ค)

-> ์–ด๋–ป๊ฒŒ ์ž๊ธฐ ์ž์‹ ์ด ๋  ์ˆ˜ ์žˆ๋ƒ?! -> ๋ถ€๋ชจ ๋ทฐ์ปจ ์ •์˜๋ฅผ ๋ด๋ผ! class FirstViewController๊ฐ€ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์Œ! wow

 

- ๋‹ค์‹œ ์ •๋ฆฌํ•˜์ž๋ฉด 

- ์ž์‹ ๋ทฐ์˜ delegate (labelChangeProtocol)์€ ๋ถ€๋ชจ ๋ทฐ (FirstViewController)๊ฐ€ ๋˜๋Š” ๊ฒƒ! 

- ์˜ค,, ์™„ - ๋ฒฝ ์ดํ•ด๋จ 

- ๋”ฐ๋ผ์„œ ์ž์‹๋ทฐ์—์„œ delegate(==๋ถ€๋ชจ๋ทฐ)์˜ onChange ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ

 

- ๋ถ€๋ชจ๋ทฐ์˜ onChange ๋ฉ”์†Œ๋“œ๋Š”, ๋ถ€๋ชจ๋ทฐ์—์„œ๋Š” ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์ด ์—†๋‹ค!

-> ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์˜ฌ๋ผ๊ฐ€๊ณ , ์‚ฌ์šฉ๋  ์ค€๋น„๋ฅผ ํ•˜๋Š” ๊ฒƒ (์•„์ง ์‚ฌ์šฉ ์•ˆ ๋จ)

- ํ™”๋ฉด ์ „ํ™˜ (present) ๋˜๊ธฐ ์ „์—, ์ž์‹ ๋ทฐ์˜ delegate๋กœ ๋ถ€๋ชจ ๋ทฐ๋ฅผ ์ „๋‹ฌ

 

 

Delegate ์˜ ์—ญํ• 

- ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

- ๋ทฐ ๊ฐ„์˜ ์—ฐ๊ฒฐ

- ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฐ™์€ ์—ญํ• ์ด ์ด์ œ์„œ์•ผ ์ž˜ ์ดํ•ด ๋œ๋‹ค!

- ์ž์‹ ๋ทฐ์™€ ๋ถ€๋ชจ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• 

+ ์—ฐ๊ฒฐ๊ณผ ๋”๋ถˆ์–ด, ๋ฐ์ดํ„ฐ Pass

 

 

 

์ž์‹๋ทฐ์˜ ๊ตฌํ˜„ ๋‚ด์šฉ! (๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆด ๋•Œ, delegate๋ฅผ ํ†ตํ•ด onChange ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•จ) + dismiss ์ •์˜

 

- onChange๋กœ ๊ฐ’์ด ๋„˜์–ด๊ฐ„ ์ดํ›„์—, dismiss๊ฐ€ ๋œ๋‹ค. 

: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ธก๋ฉด์—์„œ ์ด๊ฑด ๊ดœ์ฐฎ์€๊ฑด๊ฐ€? (๋ฐ์ดํ„ฐ๊ฐ€ ๋„˜์–ด์˜ค๊ธฐ ์ „์—, ํ™”๋ฉด์ด ๊ทธ๋ ค์ง€๊ฒŒ ๋œ๋‹ค๋ฉด?)

- ์„œ๋ฒ„ or API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๋ฉด? 

- ์ด๊ฑฐ ๋•Œ๋ฌธ์— ์›์ธ ๋ชจ๋ฅผ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ์ƒ๊ฒผ๋˜ ์ ์ด ์žˆ๋Š”๋ฐ,, (์›์ธ ์ด์ œ๋Š” ์•Œ์ง€๋งŒ)

-> ๊ทธ๋ž˜์„œ RX or Combine or escaping closure ํ™œ์šฉ? 

 

 

๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์œ„ํ•ด Protocol์„ ์ผ๋Š”๋ฐ, ๋‹ค์‹œ escaping closure๋‚˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ์ž‘์—…๋“ค์„ ํ•ด์•ผํ•˜๋Š”๊ฐ€? 

- URLSession (URL ๊ฐ–๊ณ ์˜ค๋Š” ๊ฑธ) ๋ถ€๋ชจ ๋ทฐ์—์„œ ๊ฐ–๊ณ  ์žˆ๊ณ , 

- ํ•ด๋‹น delegate๋ฅผ ์ž์‹๋ทฐ๊ฐ€ ๊ฐ€์ ธ๊ฐ€์„œ, URL Request๋งŒ ์œ ๋ฐœ (ํŠน์ • ํ…์ŠคํŠธ๋ผ๋˜์ง€, ์‹œ์ž‘๋งŒ ์ž์‹ ๋ทฐ์—์„œ ํ•˜๋Š” ๊ฒƒ)

- ์ž์‹๋ทฐ๊ฐ€ ์ฃฝ์œผ๋ฉด, ํ•ด๋‹น contents๋“ค๋„ ๋‹ค ์ฃฝ๊ธฐ ๋•Œ๋ฌธ์— ! ๊ณค๋ž€ํ•˜๋‹ค.

- ์ด๊ฑด ๋ถ€๋ชจ ๋ทฐ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š”๊ฒŒ ๋งž๋‹ค. (์ž์‹๋ทฐ๋Š” start๋งŒ)

: ์ด์Šค์ผ€์ดํ•‘ ํด๋กœ์ €๋‚˜, ํ”„๋กœํ† ์ฝœ ์ฒ˜๋ฆฌ๋“ค์€ ๋‚˜์ค‘ ๋ฌธ์ œ

 

 

 

 

 

Table view ์‹ค์Šต 

 

 

 

table view์™€ ํ•จ๊ป˜ cell๋„ ๊ฐ™์ด ๊น”์•„์ค˜์•ผ ํ•œ๋‹ค!

 

 

์ฑ„ํŒ…๋ฐฉ ์…€์ด ํ•˜๋‚˜ํ•˜๋‚˜ ๊น”๋ ค์žˆ์Œ

 

- table view๋ฅผ ๊น” ๋•Œ, ํ™”๋ฉด์˜ safe area ๋๊นŒ์ง€ ๋‹ซ๊ฒŒ ๊ตฌ์„ฑ

-> ์ž˜๋ฆฐ ์ฑ„ํŒ…๋ฐฉ ๋ถ€๋ถ„์„ ํ†ตํ•ด ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์Œ 

+ table view์˜ ์žฅ์  : ๋ฐ˜๋ณต๋˜๋Š” ํ™”๋ฉด์„ cell ํ•˜๋‚˜๋งŒ ๊ตฌํ˜„ํ•˜์—ฌ, ์žฌ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค! :)

 

 

cell ๋‚ด๋ถ€์˜ content view์—์„œ ๋ ˆ์ด์•„์›ƒ์„ ์žก๋Š”๋‹ค. (์…€ ๋‚ด๋ถ€์˜ ์ด๋ฏธ์ง€, ๋ผ๋ฒจ๋“ค ๋“ฑ๋“ฑ)
UI๋ฅผ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์งœ๋ฉด ๋œ๋‹ค!

 

- ๊ฐœ์ธ ํ†ก ๊ฐ™์€ ๊ฒฝ์šฐ๋Š”, ์ธ์›์ˆ˜ label์„ hidden ์ฒ˜๋ฆฌํ•˜๋˜์ง€, ํ•ด๋‹น text ๊ฐ’์„ ๋น„์›Œ๋‘๋ฉด ๋œ๋‹ค.

- ๋’ค์—์„œ ๋กœ์ง์„ ์งœ์„œ, ์žฌ์‚ฌ์šฉ์„ฑ ๋†’๊ฒŒ ์“ฐ๋ฉด ๋œ๋‹ค.

 

 

table view ๋งŒ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ

 

+ UITableVeiwDelegate ํ”„๋กœํ† ์ฝœ ์ฑ„ํƒ! 

: ์ด์   delegate๊ฐ€ ๋‚ฏ์„ค์ง€ ์•Š๋‹ค :)

 

+ UITableViewDataSource

: ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ์–ด์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ

: ์ด๊ฑฐ ์™œ ์ฒ˜์Œ ๋ณด๋Š” ๊ฒƒ ๊ฐ™์ง€?

 

-> ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค 

: ํ•„์ˆ˜ ๊ตฌํ˜„ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™€์•ผ ํ•จ

: error fixํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

: cell ๊ด€๋ จ ๋ฉ”์†Œ๋“œ๋“ค ๊ตฌํ˜„ !

 

ํ…Œ์ด๋ธ” ๋ทฐ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์™€ ๋ฐ์ดํ„ฐ์†Œ์Šค ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฝ์–ด๋ณด๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ!

 

๋ฐ์ดํ„ฐ ์†Œ์Šค๋ผ๋Š” ํ”„๋กœํ† ์ฝœ ๋‚ด๋ถ€์—๋Š”, ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋“ค์ด ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘์—์„œ ํ•„์ˆ˜๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ํ•จ์ˆ˜! (!= optional)

 

parameter ์š”์†Œ๋กœ ํ•„์ˆ˜ ๊ตฌํ˜„ ํ•จ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๋ฉด ๋œ๋‹ค. 

: ์ด๋ฆ„์€ ๋‹ค tableView๋ผ๊ณ  ํ‘œํ˜„๋จ (์™œ์ง€?)

 

- numberOfRowsInSection -> Int

- ํ•œ section์— ๋ช‡๊ฐœ์˜ ์…€์ด ๋“ค์–ด๊ฐˆ ๊ฒƒ์ธ๊ฐ€? -> Int ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด๋ผ

 

return ์œผ๋กœ int ๊ฐ’ ๋„ฃ์–ด์ฃผ๋ฉด ๋จ

 

 

cell for row at : ๋ ˆ์ด์•„์›ƒ์ด ์žกํžŒ ์…€ ํด๋ž˜์Šค๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ฝ”์ฝ”์•„ ํ„ฐ์น˜ ํด๋ž˜์Šค

 

์…€ ํŒŒ์ผ ์ƒ์„ฑ

 

- ์ด์ œ ์ข€ ์ดํ•ด๊ฐ€ ๊ฐ„๋‹ค. (cell์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์ด)

 

 

์ตœ์ข… ๋ฒ„์ ผ (๋จผ์ € ๋‚˜์™”์Œ)

 

 

 

๊ธฐ๋ณธ ๋ฒ„์ ผ / awakeFromNib == viewDidLoad

 

awakeFromNib -> LifeCycle ๋ฉ”์†Œ๋“œ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

์ด์ „์— ๋ฐฐ์šด ๊ฒƒ ์ฒ˜๋Ÿผ, life cycle๊ณผ ๊ด€๋ จ๋œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

- ์›๋ž˜ ์ƒ์„ฑํ•˜๋ฉด, ์•„๋ฌด ๊ฒƒ๋„ ์—†๋Š” ์ฑ„๋กœ ๋œจ๋Š”๋ฐ,

- ํ”„๋กœํ•„์ด๋ž‘ ์ฝ์ง€ ์•Š์€ ๋ฉ”์„ธ์ง€ ๊ฐœ์ˆ˜ ๋„์šฐ๋Š” ๋ทฐ๊ฐ€ ์›ํ˜•์ด๋ผ, corner Radius ๊ฐ’ ์„ค์ •ํ•ด๋‘” ๊ฒƒ !

 

 

 

 

Cell for row at ( ) 

- tableview์™€ indexPath๊ฐ€ parameter๋กœ ์ฃผ์–ด์ง„๋‹ค.

- tableview : delegate -> ์ฆ‰, ์•ž์„œ ์ž‘์„ฑํ•œ ์นด์นด์˜คํ†ก ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. (๊ทธ๋ƒฅ tableview๋ผ๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ๋จ)

- indexPath๋„ ์ฃผ์–ด์ง€๋Š” ๋Œ€๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

- guard let ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ cell์„ ๊ฐ€์ ธ์˜จ๋‹ค. (์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ์ด ์ •์˜ํ•œ ์ฝ”์ฝ”์•„ ํ„ฐ์น˜ ํŒŒ์ผ ์˜ต์…”๋„๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •)

- dequeueReusableCell๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. (identifier์— ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”์ฝ”์•„ํ„ฐ์น˜ ๊ทธ๊ฑฐ ์ด๋ฆ„ ๋„ฃ์–ด์ฃผ๊ณ )

- as? KakaoTalkTableViewCell ์€ ์™œ ์žˆ๋Š”๊ฒƒ? (ํ•ด๋‹น ํ˜•์‹์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ์˜๋ฏธ์ธ๊ฐ€?)

- return ๋งŒ ์“ฐ๋ฉด ์˜ค๋ฅ˜๋‚จ (return type์ด UITableViewCell) ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ํ˜•์‹ UITableViewCell()๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

 

 

 

๋‚ด๋ถ€์— ๋“ค์–ด๊ฐˆ ๋ฐ์ดํ„ฐ๋Š”?

Cell๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

-> ๊ตฌ์กฐ์ฒด๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋„ฃ์–ด์ค€๋‹ค. 

-> Data Model

-> ๋˜ ๋“œ๋””์–ด ๋ฐฅ๋จน์–ธ ์šฐ๊ธฐ ์ฝ”๋“œ๊ฐ€ ์ดํ•ด๊ฐ€ ๊ฐ€๋Š”๊ตฌ๋งŒ,, 

 

 

 

data model

 

- memberCount์˜ ๊ฒฝ์šฐ, ๊ฐœ์ธ ์ฑ„ํŒ…๋ฐฉ์ผ ๋•Œ ํ•ด๋‹น ๊ฐ’์ด ์—†์„ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์˜ต์…”๋„๋กœ ์„ ์–ธํ•œ๋‹ค.

: ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ , ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. 

+ UIImage๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์–ด, profile Image๋„ ์˜ต์…”๋„๋กœ ์„ ์–ธ (๋ณ€๊ฒฝ)

 

 

๋ณดํ†ต ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Œ

์ด๋ฒˆ ๊ฒฝ์šฐ์—๋Š”, ๋ฏธ๋ฆฌ ์ œ์ž‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์šฉ

 

 

indexPath -> indexPath.row

 

ChattingRoomData : ์ฑ„ํŒ…๋ฐฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ

cellForRowAt ์—์„œ cell ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ณผ์ •์„ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž‘์„ฑ ๊ฐ€๋Šฅ 

์˜ˆ๋ฅผ ๋“ค์–ด

cell.์ด๋ฏธ์ง€๋ทฐ.์ด๋ฏธ์ง€ = ChattingRoomData[indexPath.row].์ด๋ฏธ์ง€

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ! 

 

๋ช‡ ๋ฒˆ์งธ์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋Š” indexPath.row๋กœ ํ™œ์šฉ

-> ์–˜๊ฐ€ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ ์ž๋™์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฑด๊ฐ€? (๋์€ Int ๋ฐ›์•„์˜จ ๊ฐ’์œผ๋กœ ๋„ฃ๊ณ ?)

 

 

 

ํ•˜๋‚˜ํ•˜๋‚˜ ๋„ฃ๋Š” ๊ณผ์ •์ด ๋ฒˆ๊ฑฐ๋กญ๋‹ค๋ฉด, tableviewcell ํŒŒ์ผ ๋‚ด๋ถ€์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋„ ๋œ๋‹ค.

 

(๋‹ค์‹œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋„ฃ์–ด์ค€ ๊ฒƒ ๊ฐ™์Œ)

 

member์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ hidden ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ • (์กฐ๊ฑด๋ฌธ)

cell ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ณผ์ •์€ ์ž‘์„ฑ ์™„๋ฃŒ! 

 

 

row์˜ ์ˆ˜๋Š” -> ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋กœ ์ ‘๊ทผ (๋‹จ์ˆœํ•œ ์ˆซ์ž๋ณด๋‹ค ํ›จ์”ฌ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค!)

chattingRoomData.count

 

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ณผ์ •์ด ๋‚จ์Œ!

 

์ž์‹๋ทฐ (์นด์นด์˜คํ†ก ํ…Œ์ด๋ธ” ๋ทฐ)์˜ delegate์™€ datasource์— self ๋Œ€์ž…ํ•˜๊ธฐ! 

-> ์ด๋•Œ, ๋ถ€๋ชจ ๋ทฐ๋Š” ์นด์นด์˜คํ†ก ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ (!= ํ…Œ์ด๋ธ”๋ทฐ)

 

 

 - ์žฌ์‚ฌ์šฉ ํ์˜ ๋ฌธ์ œ์ ๋„ ์žˆ๋‹ค. 

์ฒซ๋ฒˆ์งธ ์…€์ผ ๊ฒฝ์šฐ์—, ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋นจ๊ฐ•์ƒ‰์œผ๋กœ
์Šคํฌ๋กค ํ•˜๋‹ค๋ณด๋ฉด ์—ฌ๋Ÿฌ ์…€๋“ค์ด ๋นจ๊ฐ›๊ฒŒ ๋ณ€ํ•œ๋‹ค (๋ฌด์ž‘์œ„๋กœ)

 

- ์žฌํ™œ์šฉ๋˜๋‹ค๋ณด๋‹ˆ๊นŒ,

- ๊ทธ๋Œ€๋กœ ์†์„ฑ์ด ๋‚จ์•„์žˆ๋‹ค. 

- ์žฌํ™œ์šฉ ํ•  ๋•Œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค. 

-> ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ 0๋ฒˆ์งธ ์…€์—๋งŒ ๋นจ๊ฐ„ ๋ฐฐ๊ฒฝ์„ ๋„ฃ์–ด์˜ค๊ธฐ! 

: ํŠน์ • ์…€ ๋ถ€๋ถ„์—๋งŒ, ํŠน์ • ๋ณ€ํ˜•์„ ์ ์šฉํ•˜๊ธฐ 

 

 

 

 

 

์Šคํƒ ๋‹ค๋“œ ๋ฏธ์…˜: ํ…Œ์ด๋ธ” ๋ทฐ๋ฅผ ํ™œ์šฉํ•œ ๋ฉ”๋ชจ์žฅ ๊ฐœ๋ฐœํ•˜๊ธฐ

์ฒผ๋ฆฐ์ง€ ๋ฏธ์…˜: swift ์˜ต์…˜์„ ํ™œ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ ์˜ต์…˜ ๋งŒ๋“ค์–ด์˜ค๊ธฐ

 

 

 

์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ (ํŠนํžˆ ์ปฌ๋ ‰์…˜ ๋ทฐ!)

+ ์„น์…˜ ๊ตฌ์„ฑ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€!

+ Header, Footer ์กฐ์‚ฌ