2022. 10. 11. 15:13ใUniversityMakeUsChallenge/UMCiOS
๊ฐ์๋ก ๋์ฒด
๋ฆ์ ์๊ฐ์ ์ฌ๋ผ์์, ๋ค์๋ ๋ค์๋ค.
Table view, Collection view -> Protocol
๋ฏธ์ ์ ๊ฒ ๋!
์ค๋์ ๋ด์ฉ ~
- ๋๋ ๋ฐฅ๋จน์ธ ์ค์ ํ๋ฉด ๊ตฌํํ ๋ table view ํ์ฉํจ !
: Cell ๊ด๋ จํ์ฌ ์ด๋ ค์์ ๊ฒช์๋ ๊ธฐ์ต์ด ๋๋ค..
- ์ฌ์ฌ์ฉ Queue : ๋ค์์ ์ค๋ช
- ๋์ผํ ๋ด์ฉ๋ค์ ๋์ดํ ๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ์ค์ ํ๋ฉด, ์นด์นด์คํก ํ ํ๋ฉด ๋ฑ๋ฑ
- Table view : swift option (๋ฉ๋ชจ ์ญ์ , ์นด์นด์ค ์ฑํ ๋ฐฉ ๋๊ฐ๊ธฐ ๋ฑ)
- Collection view : paging option (์ดํ ์๋จ์ ๋ฐฐ๋ -> ํ์ด์ง ์ค์์ดํ ๊ฐ๋ฅ)
- ๋ ๋ค Scroll view๋ฅผ ์์๋ฐ๊ณ ์๋ค.
- table view๋ก ๊ตฌํ ๊ฐ๋ฅํ ๊ฒ์ collection view๋ก๋ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
- ๋ฐ๋๋ก collection view๋ก ๊ตฌํ ๊ฐ๋ฅํ ๊ฒ์ table view๋ก๋ ๊ตฌํ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ์๋ค.
- collection view์ ๋์ฒด ๋ถ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ด ์์ ์ ์๋ค. (๋ฉํ ๋ถ์ ๊ฐ์ธ์ ์ธ ์๊ฒฌ์ผ๋ก ์๋ ์๋ ์์)
- ํ๋กํ ์ฝ์ ๋ฉ๋ด์ผ์ด๋ค.
- ํ๋กํ ์ฝ์ ์ฒญ์ฌ์ง์ด๋ค. (์ค์ง์ ์ธ ๊ตฌํ์ ํ์ง ์์)
: ๊ฐ์ด๋๋ผ์ธ (์ต์ ์๊ตฌ์ฌํญ) -> ์ฑํํ๋ค๋ฉด ํด๋น ํจ์๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ค.
- ํ๋กํ ์ฝ์ ์ฑํ -> ๋งค๋ด์ผ ์ด๋ฆ์ ์ ์ํ๊ณ , ๋ด๋ถ ํจ์์ ์ธ๋ถ ๊ตฌํ์ ํด์ผํ๋ค.
- protocol delegate pattern
- table view & collection view ๊ตฌํ
- protocol design pattern
: ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ , ๋ทฐ์ ๋ทฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ํจํด
: Swift์ ๊ตญํ๋ ๋์์ธ ํจํด์ด ์๋๋ค.
protocol labelChangeProtocol {
func onChange(text: String)
}
protocol์ ์ด๋ฆ : labelChangeProtocol
protocol์ ์ต์ ์๊ตฌ์ฌํญ: func onChange(text: String)
-> labelChangeProtocol ํ๋กํ ์ฝ์ ์ฑํํ๋ฉด, onChange ํจ์๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ค.
- ์ด์ํ๋ค?
- text ๊ฐ์ ๋ฐ๊พธ์ด์ฃผ๋ ค๋ฉด onChange ํจ์๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
- ๊ทผ๋ฐ ์ด text ๋ฐ์ดํฐ๋ ์์ ๋ทฐ์ textfield์์ ๋ฐ์์์ผ ํ๋ค.
-> ์ฆ, onChange ํจ์๋ ๋ถ๋ชจ ๋ทฐ์์ ํธ์ถ X, ์์ ๋ทฐ์์ ์ฌ์ฉํ ํจ์์ด๋ค!
: ์ด์ ์ผ ์ดํด๊ฐ ์ ๋๋ก ๋๋ค !!!
: ๋ถ๋ชจ ๋ทฐ์์๋ ์ ์๋ง ํด๋๋ ๊ฒ
Protocol Delegate Pattern
- Delegate๋ ๋ฌด์์ธ๊ฐ? -> ๋๋ฆฌ์, ์์์
- ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ๊ตฌํํ๋ ๊ฒ์ ๋ถ๋ชจ๋ทฐ -> onChange ํจ์์ ์ค์ ์ฌ์ฉ์ ์์ ๋ทฐ์์ ํ๋ค.
- ํ๋กํ ์ฝ ์ฑํ๊ณผ ๊ตฌํ์ ๋ค๋ฅธ ๋ทฐ์ปจํธ๋กค๋ฌ์์ -> ์ฌ์ฉ์ ๋ค๋ฅธ ๋ทฐ์ปจํธ๋กค๋ฌ์์ ๋์ ํ๋ ๊ฒ !
- ์์ ๋ทฐ์์ ํ๋กํ ์ฝ์ delegate๋ผ๋ ๋ณ์๋ก ๊ฐ์ ธ์จ๋ค. (์ต์ ๋ ํ์ ์ผ๋ก)
- ๋ญ์ง? ์? ํ๋กํ ์ฝ์ ๋ฐ์์ค๋ ๊ฑธ๊น?
-> ํ๋กํ ์ฝ ๋ด๋ถ์ ์ ์ธ๋ onChange๋ผ๋ ํจ์๋ฅผ ์จ์ผํ ๊ฑฐ ์๋!
- ์์ ๋ทฐ์์ delegate๋ผ๋ ๋ณ์๋ก ํ๋กํ ์ฝ์ ๊ฐ์ ธ์จ๋ค.
: ์ด๋, ๋ฐ์ดํฐ ํ์ ๋ง ์กด์ฌํ๊ณ , ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ (๊ฐ์ ๋ฃ์ด์ฃผ์ง ์์ ๊ฒ)
- ํด๋น delegate๋ ๊ทธ๋ผ ๋ญ๋ฐ?
-> ์ด๊ฒ์ด ๋ฐ๋ก ๋ถ๋ชจ ๋ทฐ์ ํ๋กํ ์ฝ!
: ๋ฐ๋ผ์ ๋ฐ๋์ ๋ถ๋ชจ ๋ทฐ์์ ์ด๋ฅผ ์ฒ๋ฆฌํด์ค์ผํจ! (self๋ฅผ ํ์ฉํ๋ค!!)
์์๋ทฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์, delegate ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ค.
-> ์์๋ทฐ์ delegate (label change protocol)์ ๋ถ๋ชจ๋ทฐ๋ค (self๋ค)
-> ์ด๋ป๊ฒ ์๊ธฐ ์์ ์ด ๋ ์ ์๋?! -> ๋ถ๋ชจ ๋ทฐ์ปจ ์ ์๋ฅผ ๋ด๋ผ! class FirstViewController๊ฐ ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์์! wow
- ๋ค์ ์ ๋ฆฌํ์๋ฉด
- ์์ ๋ทฐ์ delegate (labelChangeProtocol)์ ๋ถ๋ชจ ๋ทฐ (FirstViewController)๊ฐ ๋๋ ๊ฒ!
- ์ค,, ์ - ๋ฒฝ ์ดํด๋จ
- ๋ฐ๋ผ์ ์์๋ทฐ์์ delegate(==๋ถ๋ชจ๋ทฐ)์ onChange ๋ฉ์๋๋ฅผ ์คํ์ํค๋ ๊ฒ
- ๋ถ๋ชจ๋ทฐ์ onChange ๋ฉ์๋๋, ๋ถ๋ชจ๋ทฐ์์๋ ์คํ๋๋ ๋ถ๋ถ์ด ์๋ค!
-> ๋ฉ๋ชจ๋ฆฌ์๋ง ์ฌ๋ผ๊ฐ๊ณ , ์ฌ์ฉ๋ ์ค๋น๋ฅผ ํ๋ ๊ฒ (์์ง ์ฌ์ฉ ์ ๋จ)
- ํ๋ฉด ์ ํ (present) ๋๊ธฐ ์ ์, ์์ ๋ทฐ์ delegate๋ก ๋ถ๋ชจ ๋ทฐ๋ฅผ ์ ๋ฌ
Delegate ์ ์ญํ
- ๋ฐ์ดํฐ ์ ๋ฌ
- ๋ทฐ ๊ฐ์ ์ฐ๊ฒฐ
- ์ง๊ฒ๋ค๋ฆฌ ๊ฐ์ ์ญํ ์ด ์ด์ ์์ผ ์ ์ดํด ๋๋ค!
- ์์ ๋ทฐ์ ๋ถ๋ชจ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ
+ ์ฐ๊ฒฐ๊ณผ ๋๋ถ์ด, ๋ฐ์ดํฐ Pass
- onChange๋ก ๊ฐ์ด ๋์ด๊ฐ ์ดํ์, dismiss๊ฐ ๋๋ค.
: ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ธก๋ฉด์์ ์ด๊ฑด ๊ด์ฐฎ์๊ฑด๊ฐ? (๋ฐ์ดํฐ๊ฐ ๋์ด์ค๊ธฐ ์ ์, ํ๋ฉด์ด ๊ทธ๋ ค์ง๊ฒ ๋๋ค๋ฉด?)
- ์๋ฒ or API๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค๋ฉด?
- ์ด๊ฑฐ ๋๋ฌธ์ ์์ธ ๋ชจ๋ฅผ ์ค๋ฅ๊ฐ ๋ง์ด ์๊ฒผ๋ ์ ์ด ์๋๋ฐ,, (์์ธ ์ด์ ๋ ์์ง๋ง)
-> ๊ทธ๋์ RX or Combine or escaping closure ํ์ฉ?
๋ฐ์ดํฐ ์ ๋ฌ์ ์ํด Protocol์ ์ผ๋๋ฐ, ๋ค์ escaping closure๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์์ ๋ค์ ํด์ผํ๋๊ฐ?
- URLSession (URL ๊ฐ๊ณ ์ค๋ ๊ฑธ) ๋ถ๋ชจ ๋ทฐ์์ ๊ฐ๊ณ ์๊ณ ,
- ํด๋น delegate๋ฅผ ์์๋ทฐ๊ฐ ๊ฐ์ ธ๊ฐ์, URL Request๋ง ์ ๋ฐ (ํน์ ํ ์คํธ๋ผ๋์ง, ์์๋ง ์์ ๋ทฐ์์ ํ๋ ๊ฒ)
- ์์๋ทฐ๊ฐ ์ฃฝ์ผ๋ฉด, ํด๋น contents๋ค๋ ๋ค ์ฃฝ๊ธฐ ๋๋ฌธ์ ! ๊ณค๋ํ๋ค.
- ์ด๊ฑด ๋ถ๋ชจ ๋ทฐ๊ฐ ๊ฐ๊ณ ์๋๊ฒ ๋ง๋ค. (์์๋ทฐ๋ start๋ง)
: ์ด์ค์ผ์ดํ ํด๋ก์ ๋, ํ๋กํ ์ฝ ์ฒ๋ฆฌ๋ค์ ๋์ค ๋ฌธ์
Table view ์ค์ต
- table view๋ฅผ ๊น ๋, ํ๋ฉด์ safe area ๋๊น์ง ๋ซ๊ฒ ๊ตฌ์ฑ
-> ์๋ฆฐ ์ฑํ ๋ฐฉ ๋ถ๋ถ์ ํตํด ์ ์ถํ ์ ์์
+ table view์ ์ฅ์ : ๋ฐ๋ณต๋๋ ํ๋ฉด์ cell ํ๋๋ง ๊ตฌํํ์ฌ, ์ฌ์ฌ์ฉํ๋ฉด ๋๋ค! :)
- ๊ฐ์ธ ํก ๊ฐ์ ๊ฒฝ์ฐ๋, ์ธ์์ label์ hidden ์ฒ๋ฆฌํ๋์ง, ํด๋น text ๊ฐ์ ๋น์๋๋ฉด ๋๋ค.
- ๋ค์์ ๋ก์ง์ ์ง์, ์ฌ์ฌ์ฉ์ฑ ๋๊ฒ ์ฐ๋ฉด ๋๋ค.
+ UITableVeiwDelegate ํ๋กํ ์ฝ ์ฑํ!
: ์ด์ delegate๊ฐ ๋ฏ์ค์ง ์๋ค :)
+ UITableViewDataSource
: ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์ด์ฃผ๋ ํ๋กํ ์ฝ
: ์ด๊ฑฐ ์ ์ฒ์ ๋ณด๋ ๊ฒ ๊ฐ์ง?
-> ์๋ฌ๊ฐ ๋ฌ๋ค
: ํ์ ๊ตฌํ ์ฌํญ์ ๊ฐ์ ธ์์ผ ํจ
: error fixํ๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ค.
: cell ๊ด๋ จ ๋ฉ์๋๋ค ๊ตฌํ !
parameter ์์๋ก ํ์ ๊ตฌํ ํจ์๋ฅผ ํ์ ํ๋ฉด ๋๋ค.
: ์ด๋ฆ์ ๋ค tableView๋ผ๊ณ ํํ๋จ (์์ง?)
- numberOfRowsInSection -> Int
- ํ section์ ๋ช๊ฐ์ ์ ์ด ๋ค์ด๊ฐ ๊ฒ์ธ๊ฐ? -> Int ํ์ ์ผ๋ก ๋ฐํํด๋ผ
- ์ด์ ์ข ์ดํด๊ฐ ๊ฐ๋ค. (cell์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ด)
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
-> ๋ ๋๋์ด ๋ฐฅ๋จน์ธ ์ฐ๊ธฐ ์ฝ๋๊ฐ ์ดํด๊ฐ ๊ฐ๋๊ตฌ๋ง,,
- memberCount์ ๊ฒฝ์ฐ, ๊ฐ์ธ ์ฑํ ๋ฐฉ์ผ ๋ ํด๋น ๊ฐ์ด ์์ ์๋ ์์ผ๋ฏ๋ก ์ต์ ๋๋ก ์ ์ธํ๋ค.
: ๊ฐ์ด ์์ ์๋ ์๊ณ , ์์ ์๋ ์๋ค.
+ UIImage๊ฐ ์๋ฌ๊ฐ ๋ ์ ์์ด, profile Image๋ ์ต์ ๋๋ก ์ ์ธ (๋ณ๊ฒฝ)
๋ณดํต ์๋ฒ ๊ฐ๋ฐ์๊ฐ ์ฃผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์
์ด๋ฒ ๊ฒฝ์ฐ์๋, ๋ฏธ๋ฆฌ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฉ
ChattingRoomData : ์ฑํ ๋ฐฉ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ๋ฆฌ์คํธ
cellForRowAt ์์ cell ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ณผ์ ์ ํด๋น ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ์ฌ ์์ฑ ๊ฐ๋ฅ
์๋ฅผ ๋ค์ด
cell.์ด๋ฏธ์ง๋ทฐ.์ด๋ฏธ์ง = ChattingRoomData[indexPath.row].์ด๋ฏธ์ง
์ด๋ฌํ ๋ฐฉ์์ผ๋ก!
๋ช ๋ฒ์งธ์ธ์ง์ ๋ํ ์ ๋ณด๋ indexPath.row๋ก ํ์ฉ
-> ์๊ฐ ๋ฐ๋ณต๋ฌธ ๋๋ฉด์ ์๋์ผ๋ก ์ง์ ํด์ฃผ๋ ๊ฑด๊ฐ? (๋์ Int ๋ฐ์์จ ๊ฐ์ผ๋ก ๋ฃ๊ณ ?)
member์ ์ ๋ฌด์ ๋ฐ๋ผ hidden ์ฒ๋ฆฌํ๋ ๊ณผ์ (์กฐ๊ฑด๋ฌธ)
cell ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ณผ์ ์ ์์ฑ ์๋ฃ!
chattingRoomData.count
์์๋ทฐ (์นด์นด์คํก ํ ์ด๋ธ ๋ทฐ)์ delegate์ datasource์ self ๋์ ํ๊ธฐ!
-> ์ด๋, ๋ถ๋ชจ ๋ทฐ๋ ์นด์นด์คํก ๋ทฐ์ปจํธ๋กค๋ฌ (!= ํ ์ด๋ธ๋ทฐ)
- ์ฌ์ฌ์ฉ ํ์ ๋ฌธ์ ์ ๋ ์๋ค.
- ์ฌํ์ฉ๋๋ค๋ณด๋๊น,
- ๊ทธ๋๋ก ์์ฑ์ด ๋จ์์๋ค.
- ์ฌํ์ฉ ํ ๋ ์ฒ๋ฆฌํด์ผํ๋ ๋ถ๋ถ์ด ์๋ค.
-> ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ 0๋ฒ์งธ ์ ์๋ง ๋นจ๊ฐ ๋ฐฐ๊ฒฝ์ ๋ฃ์ด์ค๊ธฐ!
: ํน์ ์ ๋ถ๋ถ์๋ง, ํน์ ๋ณํ์ ์ ์ฉํ๊ธฐ
์คํ ๋ค๋ ๋ฏธ์ : ํ ์ด๋ธ ๋ทฐ๋ฅผ ํ์ฉํ ๋ฉ๋ชจ์ฅ ๊ฐ๋ฐํ๊ธฐ
์ฒผ๋ฆฐ์ง ๋ฏธ์ : swift ์ต์ ์ ํ์ฉํ์ฌ ์ปค์คํ ์ต์ ๋ง๋ค์ด์ค๊ธฐ
์ถ๊ฐ๋ก ๊ณต๋ถํ๋ฉด ์ข์ ๊ฒ (ํนํ ์ปฌ๋ ์ ๋ทฐ!)
+ ์น์ ๊ตฌ์ฑ ์ด๋ป๊ฒ ํ๋์ง!
+ Header, Footer ์กฐ์ฌ
'UniversityMakeUsChallenge > UMCiOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
UMC iOS ์ธ๋ฏธ๋ 6์ฃผ์ฐจ: Thread (0) | 2022.10.31 |
---|---|
UMC iOS 5์ฃผ์ฐจ ์ธ๋ฏธ๋ (10/17 ์์์ผ) (0) | 2022.10.18 |
UMC iOS ์ธ๋ฏธ๋ 3์ฃผ์ฐจ (10/3, ๊ฐ์๋ก ๋์ฒด) (0) | 2022.10.04 |
AppDelegate & SceneDelegate โ๏ธ (0) | 2022.09.27 |
UMC iOS ์ธ๋ฏธ๋ 2์ฃผ์ฐจ (0) | 2022.09.26 |