๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/YouTube ๊ฐ•์˜ ๊ณต๋ถ€

ํ…Œ์ด๋ธ” ๋ทฐ(UITableView)_[iOS/Swift]_(2)

yeggrrr๐Ÿผ 2024. 3. 2. 22:49
728x90

 




<Table View ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ 2๋ฒˆ์งธ ๋ฐฉ๋ฒ•>


2024.03.02 - [Study/YouTube ๊ฐ•์˜ ๊ณต๋ถ€] - ํ…Œ์ด๋ธ” ๋ทฐ(UITableView)_[iOS/Swift]_(1)
์—ฌ๊ธฐ์„œ ๊ทธ๋Œ€๋กœ ์ง„ํ–‰!






โ‘  Main.storyboard - Table view์— Table View Cell ์ถ”๊ฐ€ - ์‚ฌ์ด์ฆˆ ์กฐ๊ธˆ ๋Š˜๋ฆฌ๊ณ , ์•ˆ์— Label ์ถ”๊ฐ€
(Label → ์ค‘์•™์ •๋ ฌ, Add New Constraints์—์„œ ์ƒํ•˜์ขŒ์šฐ 0์œผ๋กœ ์…‹ํŒ…)


โ‘ก ์ถ”๊ฐ€ํ•œ Table View cell ํด๋ฆญ - ์šฐ์ธก ์ฐฝ → Identifier : ์ด๋ฆ„
('Identifier: Type1' ์œผ๋กœ ํ•˜๊ฒ ์Œ, <์ž์œ ๋กญ๊ฒŒ>) 


โ‘ข ์•ž์„œ 1๋ฒˆ์งธ ๋ฐฉ๋ฒ•์—์„œ reuseIdentifier์„ "TableViewFirstType"์ด๋ผ๊ณ  ์ •ํ–ˆ์—ˆ๋‹ค.
์ด์ œ๋Š” ์ด ์ด๋ฆ„์ด "Type1"์ด ๋œ๋‹ค.

์ด "Type1"์„ ์ง€์ •ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋А๋ƒ!

New file - Swift file - ์ด๋ฆ„ ์ •ํ•˜๊ธฐ
(์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ "Type1"์œผ๋กœ ํ•˜๊ฒ ์Œ. <์ž์œ ๋กญ๊ฒŒ>)

์—ฌ๊ธฐ์„œ import foundation → import UIKit

์œ„์™€ ๊ฐ™์ด
 class Type1: UITableViewCell { }

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Type1์ด UITableViewCell์„ ์ƒ์†๋ฐ›๊ฒŒ ๋œ๋‹ค.
์ด ํด๋ž˜์Šค๋Š” ์•„๊นŒ Main.storyborad์—์„œ ๋งŒ๋“  ์…€๊ณผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


โ‘ฃ Main.storyboard - Type1 - ์šฐ์ธก ์ฐฝ → class: Type1

์ด๋ ‡๊ฒŒ ํ•˜๊ณ , ๋ฐ‘์— 'Inherit Module From Target'์— ์ฒดํฌ!


โ‘ค ์ด์ œ ์„ค์ •ํ•œ๋Œ€๋กœ ์ž˜ ์—ฐ๊ฒฐ๋๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ!

์œ„์— ํ‘œ์‹œํ•ด ๋†“์€ ๋ถ€๋ถ„(โ†™) ํด๋ฆญ!

์—ฌ๊ธฐ๋กœ ์ด๋™๋˜๋ฉด์„œ ์ž˜ ์—ฐ๊ฒฐ๋์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ ์ด ์ƒํƒœ์—์„œ ์•„๊นŒ ๋งŒ๋“  Label์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.


โ‘ฅ Main.storyboard์™€ Type1.swift ํ™”๋ฉด์„ ๋™์‹œ์— ๋„์›Œ๋†“๊ณ ,
์Šคํ† ๋ฆฌ๋ณด๋“œ์— ์žˆ๋Š” Label์„ Type1.swift ์ฝ”๋“œ๋กœ
drag & drop!!

๋ผ๋ฒจ ์ด๋ฆ„ ์ž์œ ๋กญ๊ฒŒ ์ ๊ณ  connect!
('Name: LabelText'์œผ๋กœ ํ•˜๊ฒ ์Œ. <์ž์œ ๋กญ๊ฒŒ>) 

Label ์—ฐ๊ฒฐ


โ‘ฆ ์ด์ œ ๋‹ค์‹œ ViewController๋กœ Go!

let cell = UITableViewCell.init( ~~~~~~~~) ์ด๊ฑฐ ์ง€์šฐ๊ณ ,

let cell = TableViewMain.deqํ•˜๋ฉด

์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ๋œฐ ๊ฒƒ์ด๋‹ค.

์ด๊ฑฐ ์„ ํƒ!!


์—ฌ๊ธฐ์„œ dequeueReusableCell์ด ๋ญ˜๊นŒ? ๐Ÿค”

"Reusable, ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์…€์„ ์ •๋ฆฌํ•ด์„œ TableViewMain์— ๋„˜๊ธฐ๊ฒ ๋‹ค."

→ ๊ทธ ์…€์˜ Identifier์€ 'Tpye1'์ด์—ˆ๊ณ , ๊ทธ indexPath ์ˆœ๋ฒˆ์— ํ•ด๋‹ค์•Ÿ๋Š” ์…€์„ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด,
"Type1"์ด๋ผ๋Š” ์• ๋ฅผ TableViewMain์—๊ฒŒ ๋„ฃ๋Š”๋‹ค๋Š” ๋œป.




โ‘ง ๋นˆ์นธ ์ฑ„์šฐ๊ธฐ.
String → "Type1"
IndexPath → indexPath



โ‘จ ์ด์ œ, ๊ธฐ์กด์— ๋ฐฉ๋ฒ• 1์—์„œ ์ ์—ˆ๋˜ cell.textLabel.text = "\(indexPath.row)" ์ง€์šฐ๊ณ !!
cell.LabelText ๋ฅผ ์ณ๋ณด๋ฉด?? 

???? ์•ˆ๋œ๋‹ค. ์™œ์ง€??
→ ์œ„์— 'dequeue ~' ๋Š” ๋ถ€๋ชจ ์†์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์—ฌ๊ธฐ์„œ as ๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
(as? - ํƒ€์ž…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”๋ก  / as! - ๊ฐ•์ œ๋กœ ๋ณ€ํ™˜)

Type1์€ UITableViewCell์ด๋ผ๋Š” ์•„์ด์˜ ์œ ์ „์ž๋ฅผ ๋ฌผ๋ ค๋ฐ›์€ ์ž์‹์ด๋‹ค. (=์ƒ์†๋ฐ›์Œ)

let cell = TableViewMain.dequeueReusableCell(withIdentifier: "Type1", for: indexPath)
์ด๊ฑด UITableViewCell์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์—
"์• ๊ฐ€ ์•„๋‹ˆ๋ผ ์ƒ์†๋ฐ›์€ Type1์ด์•ผ!" ๋ผ๊ณ  ์ •์ฒด์„ฑ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฐํ˜€์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์ด ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ as? ์™€ as! ์ด๋‹ค.
(as? - "๋‚˜ ๋งž์•„..?" / as! - "๋‚˜ ๋งž์•„!!" ์ด๋Ÿฐ ๋А๋‚Œ)

์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฑด ์ž์‹์ธ 'Type1' ์ด๊ธฐ ๋•Œ๋ฌธ์—
๋ฐ”๋กœ ๋’ค์— as! Type1 ์ด๋ผ๊ณ  ํ•ด์ค˜์•ผ ํ•จ.
(Type1์„ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์„œ ํ™•์‹คํ•˜๊ธฐ ๋•Œ๋ฌธ์— as!)




โ‘ฉ ์ด์ œ cell.LabelText ํ•˜๋ฉด ๋‚˜์˜ด.
cell.LabelText.text = "\(indexPath.row)"


๋! ๐Ÿฅน
์‹คํ–‰ Go!!



์ตœ์ข… ์ฝ”๋“œ
๊ฒฐ๊ณผ๋ฌผ




<๋ฐฉ๋ฒ• 1๊ณผ 2์˜ ์ฐจ์ด์ >

๋ณด๊ธฐ์—๋Š” 1, 2 ์ฐจ์ด๊ฐ€ ๋ณ„๋กœ ์—†์–ด ๋ณด์ธ๋‹ค.
๋ˆˆ์— ๋„๋Š” ์ฐจ์ด๋ผ๋ฉด, 1์€ ์ขŒ์ธก ์ •๋ ฌ, 2๋Š” ์ค‘์•™ ์ •๋ ฌ์ด๋ผ๋Š” ๊ฒƒ?

๊ทธ๋Ÿฌ๋‚˜, ์‹ค์ „์€ 2๋ฒˆ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
1๋ฒˆ ๋ฐฉ๋ฒ•์€ ๊ฑฐ์˜ ์•ˆ์“ฐ๋‹ˆ๊นŒ '์—ฐ์Šต์ด๋‹ค..' ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.



 

728x90