โœ๏ธ TIL

[ TIL ] ์‰ฝ์ง€ ์•Š๋„ค.. / StackView์œ„์˜ TableView / 24๋…„ 3์›” 27์ผ

EarthSea 2024. 3. 27. 19:48

 

4๋ฒˆ ์ถ”์ฒœ ๊ตณ! / ์ถœ์ฒ˜ : ํ•€ํ„ฐ๋ ˆ์ŠคํŠธ yurang

 

 

์•ˆ๋…•ํ•˜์„ธ์š”! ์ธ์ƒ์ด ์ฐธ ๋งˆ์Œ์ฒ˜๋Ÿผ ์‰ฝ์ง€ ์•Š๋„ค์š”..!๐Ÿ˜ฑ

๊ทธ๋ž˜๋„ ๋งŽ์€ ๊ฒƒ๋“ค์„ ํ•œ ๊ฒƒ ๊ฐ™์•„์š”!

์šฐ์„  ์ œ๊ฐ€ ๋‹ฅ์ณค๋˜ ์˜ค๋ฅ˜๋“ค๋ถ€ํ„ฐ ์ •๋ฆฌํ•ด ๋ด…์‹œ๋‹ค.

 

TableView์˜ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜

์ €์˜ ์ƒํ™ฉ์„ ์„ค๋ช…ํ•˜์ž๋ฉด, CalenderVC์—์„œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๋ฉด TodoListVC์œผ๋กœ ํ•ด๋‹น ๋‚ ์งœ๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด์„œ ํ™”๋ฉด์ด ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋„˜๊ฒจ์ค€ ๋‚ ์งœ๋ฅผ ๊ฐ€์ง€๊ณ , ์ฝ”์–ด๋ฐ์ดํ„ฐ์—์„œ ๋‚ ์งœ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ๋‹ค์Œ TodoListVC์—์„œ TodoTableViewCell๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•ด์š”.

 

๊ทผ๋ฐ!!!! ์—ฌ๊ธฐ์„œ!!!! TableView์— ์•„๋ฌด๊ฒƒ๋„ ๋œจ์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค!

 

TableViewCell๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜์ธ func tableView(_ tableView: UITableViewnumberOfRowsInSection section: Int) -> Int {} ๋Š” ํ˜ธ์ถœ์ด ๋˜๋Š”๋ฐ, func tableView(_ tableView: UITableViewcellForRowAt indexPath: IndexPath) -> UITableViewCell {} ์˜ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ์ด ๋˜์ง€ ์•Š๋Š” ๊ฑฐ์ฃ ! ( ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ถ€์— print(#function)์„ ์‚ฌ์šฉํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! )

 

์ฒ˜์Œ์—” ๋ฐ์ดํ„ฐ๊ฐ€ ๋„˜๊ฒจ์ง€์ง€ ์•Š๋Š” ๊ฑด๊ฐ€ ํ•ด์„œ ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋“ค์„ ์š”๋ฆฌ์กฐ๋ฆฌ ๋งŒ์ ธ๋ณด์•˜์ง€๋งŒ, ๊ฒฐ๋ก ์€ TableView ์ž์ฒด๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์—ˆ์–ด์š”! ์ฒ˜์Œ์— TableView์˜ ๋ฐ”ํƒ•์ƒ‰์„ ๊ฒ€์€์ƒ‰์œผ๋กœ ๋†“๊ณ  ์ถœ๋ ฅํ•ด ๋ณด์•˜์ง€๋งŒ, ์•„์˜ˆ ์ถœ๋ ฅ์ด ๋˜์ง€ ์•Š๋”๋ผ๊ณ ์š”!

๊ทธ๋ž˜์„œ Hierarchy ๋ฅผ ์ถœ๋ ฅํ•ด ๋ณด์•˜๋”๋‹ˆ ์ •๋ง TableView๊ฐ€ ์˜ฌ๋ผ์™€์žˆ์ง€ ์•Š๋”๋ผ๊ณ ์š”!

 

 

 

[ Hierarchy ํ™•์ธ ๋ฐฉ๋ฒ• ]

๋”๋ณด๊ธฐ

1. ํ”„๋กœ์ ํŠธ๋ฅผ Run ํ•œ๋‹ค!!! โญ๏ธ

2. ํ”„๋กœ์ ํŠธ์—์„œ Hierarchy๋ฅผ ๋ณด๊ณ  ์‹ถ์€ ํ™”๋ฉด์„ ๋„์šด๋‹ค!
3. Xcode์˜ ์™ผ์ชฝ ์•„๋ž˜ ํ™”๋ฉด์—์„œ ์•„๋ž˜ ๊ทธ๋ฆผ ์ค‘ 6๋ฒˆ์งธ์˜ ์—ฌ๋Ÿฌ ๋ทฐ๊ฐ€ ๊ฒน์นœ ๊ทธ๋ฆผ์„ ์„ ํƒํ•œ๋‹ค.

4. ๋งˆ์šฐ์Šค๋กœ ํ™”๋ฉด์„ ํด๋ฆญํ•˜๊ณ  ์š”๋ฆฌ์กฐ๋ฆฌ ๋‘˜๋Ÿฌ๋ณด๋ฉฐ ํ™•์ธํ•œ๋‹ค.

 

 

 

์™œ?!?!

TableView๊ฐ€ ํ™”๋ฉด์— ์ž˜ ์˜ฌ๋ผ์™€์žˆ๊ณ , @IBOutlet๋„ ์ž˜ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  delegate, dataSouce ์‹ฌ์ง€์–ด ํ”„๋กœํ† ์ฝœ์— ํ•จ์ˆ˜๊นŒ์ง€ ์ž˜ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๋Š”๋ฐ ์™œ ํ™”๋ฉด์— ํ…Œ์ด๋ธ” ๋ทฐ๊ฐ€ ๋œจ์ง€ ์•Š์ง€?!

 

์ œ๊ฐ€ StackView ์•ˆ์— TableView๋ฅผ ํ˜•์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ ..ใ…Ž

 

UIStackView๋Š” ์•ˆ์— ํฌํ•จ๋œ ๋ทฐ๋“ค์„ ๋ฐฐ์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค. UIStackView๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ์˜ ๋ทฐ๋“ค์˜ ํฌ๊ธฐ๋‚˜ ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•ด์„œ AutoLayout ์ธก๋ฉด์—์„œ๋Š” ์•„์ฃผ ํŽธ์•ˆํ•˜๊ณ  ์ข‹์€ ์นœ๊ตฌ์ด์ฃ . ํ•˜์ง€๋งŒ!!!!!! StackView๋Š” ๋‚ด๋ถ€์˜ ํฌ๊ธฐ๋‚˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์Šคํฌ๋กค์ด ํ•„์š”ํ•œ TableView๊ฐ€ StackView ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•œ ์˜์—ญ์„ ์„ค์ •ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฑฐ์ฃ ..! 

 

ํ•œ๋งˆ๋””๋กœ StackView๋Š” TableView์˜ ์œ„์น˜๋‚˜ ํฌ๊ธฐ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜์—ฌ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜์ง€ ๋ชปํ•œ๋‹ค..!!
๊ทธ๋Ÿฐ๋ฐ๋„ StackView์— ๊ผญ TableView๋ฅผ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด StackView์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ž˜ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

 

์ €๋Š” stackView๋ฅผ ์—†์• ๊ณ  ๋‹ค์‹œ TableView๋ฅผ ๋งŒ๋“ค์—ˆ๋”๋‹ˆ! ์ž˜ ์ž‘๋™ํ•˜์˜€์–ด์š”~!

 

 

์‚ฝ์งˆ์„ ์กฐ๊ธˆ ํ–ˆ์ง€๋งŒ.. ๊ทธ๋ž˜๋„ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋‹ˆ.. ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค..ใ…Ž

๊ผญ Hiererchy์™€ ์ถœ๋ ฅ์ด ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๊ณ  StackView์—๋Š” ๋‹ค์‹  TableView๋ฅผ ๋„ฃ์ง€ ์•Š๊ธฐ๋กœ ๋‹ค์งํ–ˆ์Šต๋‹ˆ๋‹ค..!!

 

 

 

Button์ด ํด๋ฆญ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜

์•„๋ž˜์˜ ํ™”๋ฉด์— ๋นจ๊ฐ„์ƒ‰ ๋„ค๋ชจ๋ฐ•์Šค ์ณ์ง„ ํ™”์‚ดํ‘œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์›๋ž˜์˜ TodoList ํ™”๋ฉด์œผ๋กœ์˜ ์ด๋™์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ.. Button์ด ํด๋ฆญ๋˜์ง€ ์•Š๋”๋ผ๊ณ ์š”!

 

 

๋‹ค๋ฅธ ๋ธ”๋กœ๊ฑฐ ๋ถ„์˜ ์‚ฝ์งˆ ๋ฐฉ์ง€๋ฅผ ๋”ฐ๋ผ ์ œ ์ฝ”๋“œ๋ฅผ ์ ๊ฒ€ํ–ˆ์–ด์š”!

 

 

์ฒซ ๋ฒˆ์งธ๋กœ Button์˜ @IBAction ์ด ์ž˜ ๋˜์–ด์žˆ๋‚˜ ํ™•์ธํ–ˆ์–ด์š”! -> Ok

๋‘ ๋ฒˆ์งธ๋กœ Hiererchyํ™”๋ฉด์„ ์‚ดํŽด๋ณด๊ณ  Button์˜ Layout์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ์‚ดํˆ์–ด์š”! -> Ok

์„ธ ๋ฒˆ์งธ๋กœ Button์œ„์— ๋‹ค๋ฅธ ํ™”๋ฉด์ด ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ–ˆ์–ด์š” -> Ok

๋„ค ๋ฒˆ์งธ๋กœ StackView์— SubView๋กœ ๋ฒ„ํŠผ์„ ์˜ฌ๋ฆฐ ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ–ˆ์–ด์š” -> ๋‚œ๋ฐ..?

 

 

 

์ œ ๋ฒ„ํŠผ์€ ์™ผ์ชฝ์˜ Label๊ณผ StackView๋กœ ํ˜•์„ฑ์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— SuperView์ธ StackView ์นœ๊ตฌ๊ฐ€ ์ œ์Šค์ฒ˜๋ฅผ ๋นผ์•—์•„๊ฐ€๋Š” ๊ฒŒ ์•„๋‹Œ๊ฐ€๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ SuperView์—์„œ subview๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ฝ”๋“œ์™€ ๋ฒ„ํŠผ์ด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋Š” ์ฝ”๋“œ๋ฅผ ์งœ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ์š”!

func setGoToTodoButton() {
    stackView.isUserInteractionEnabled = true // ์ด์ œ subview๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•จ
    stackView.addSubview(goToTodoButton) // ๋ฒ„ํŠผ์ด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์Œ
}

 

 

ํ•˜์ง€๋งŒ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋”๋ผ๊ณ ์š”! ์ œ ์ฝ”๋“œ๋Š” ์ € ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค..!

๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋ฒ„ํŠผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ• ๊นŒ?! ํ•ด์„œ ๋ฒ„ํŠผ์„ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์˜ฌ๋ ค์„œ AutoLayout ์žก์•˜๋”๋‹ˆ ๋˜๋”๋ผ๊ณ ์š”?!?!

 

 

์ œ๊ฐ€ ์ƒ๊ฐํ•œ ์ œ ์ฝ”๋“œ์˜ ์›์ธ์€ button ์œ„์— ์˜ฌ๋ ค์ง„ ์ด๋ฏธ์ง€๊ฐ€ button์„ ๋ˆ„๋ฅด๋Š” ์ œ์Šค์ฒ˜๋ฅผ ๋นผ์•—์•„ ๊ฐ„ ๊ฒƒ ๊ฐ™์•„์š”! ํ˜„์žฌ์˜ hirerchy๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ UIButton์œ„์— ๋ฐ”๋กœ image๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ „์˜ hirerchy์—์„œ๋Š” ์ € ์‚ฌ์ด์— ํ•œ ๋ทฐ๊ฐ€ ๋” ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์š”! ๊ทผ๋ฐ ๊ทธ๊ฒŒ ๋ฌธ์ œ์ธ์ง€ ๋ชฐ๋ž์—ˆ์–ด์š”.. ใ…Ž

์ด์ œ๋ถ€ํ„ฐ Button ์œ„์—๋Š” ํ•œ ๊ฐœ์˜ imageView๋งŒ์ด ์˜ฌ๋ผ์™€ ์žˆ์–ด์•ผ ํ•˜๊ตฌ๋‚˜! ์•Œ์•˜์œผ๋ฉด ๋์ฃ ใ…Ž

 

 

 1์ผ 1๋กœ๊ทธ 100์ผ ์™„์„ฑ IT์ง€์‹

๋„คํŠธ์›Œํฌ ํšจ๊ณผ๋Š” ์‚ฌ๋žŒ๋“ค์ด A๋ฅผ ๋งŽ์ด ์“ฐ๋ฉด ๋งŽ์ด ์“ธ์ˆ˜๋ก ๋‹น์‹ ์—๊ฒŒ๋„ A์˜ ํ˜ธ์šฉ์ด ์ปค์ง€๋ฉฐ, ๊ทธ ํšจ๊ณผ๋Š” ์‚ฌ์šฉ์ž์˜ ์ˆ˜์— ๋Œ€๋žต ๋น„๋ก€ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

"์™„์„ฑ๋œ ์žฅ์น˜๊ฐ€ ๋ฒ”์šฉ ์ปดํ“จํŒ… ๊ธฐ๊ณ„๊ฐ€ ๋˜๋ ค๋ฉด ์‚ฐ์ˆ  ์—ฐ์‚ฐ, ๊ธฐ์–ต-์ €์žฅ, ์ œ์–ด, ์šด์˜์ž์™€์˜ ์—ฐ๊ฒฐ์„ ๋‹ด๋‹นํ•˜๋Š” ํŠน์ • ์ฃผ์š” ๊ธฐ๊ด€์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค."

- ์•„์„œ ๋ฒ…์Šค, ํ—ˆ๋จผ ๊ณจ๋“œ์Šคํƒ€์ธ, ์กด ํฐ ๋…ธ์ด๋งŒ, 1946

 

 

๐Ÿ“ ์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ
[์‚ฝ์งˆ ๋ฐฉ์ง€] UIButton์ด Tap Gesture๋ฅผ ์ธ์‹ ๋ชปํ•˜๋Š” ์›์ธ 5๊ฐ€์ง€