<3์ฃผ์ฐจ TIL>
์ค๋์ ๊ฐ์๋ ํ ๋ฒ์ ์ดํดํ๊ธฐ ์กฐ๊ธ ์ด๋ ค์ด ๋ถ๋ถ๋ค์ด ์์ด์,
๋ ๋ฒ์งธ ๊ฐ์์ธ 'ํ
์ด๋ธ ๋ทฐ ๊ตฌํ'์ 3๋ฒ์ ๋ดค๋ค..ใ
ใ
๋ณด๊ณ ๋๋ ์ ์ ๋ก ์ธ์์ง๋ ๋ถ๋ถ๋ค๋ ์์๊ณ , ๊ณ์ ๋ณด๋ ์ต์ํด์ ธ์ ์์ฐ์ค๋ ๋ฐ์๋ค์ฌ์ก๋ ๊ฒ ๊ฐ๋ค.
[๋ด๋ฐฐ์บ ]์ ์์ํ๊ณ , 'ํ๋ฃจ 12์๊ฐ'์ด ์ง์ง ๊ธธ๋ค๊ณ ์๊ฐํ๋๋ฐ,
๋ณต์ต์ ์ฌ๋ฌ ๋ฒ ํ๋ค ๋ณด๋, ์๊ฐ์ด ๋ถ์กฑํ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.๐ฅน
๊ทธ๋๋ ํ๋์ฉ ์์๋๊ฐ๋ ์ฌ๋ฏธ๊ฐ ์๋ค! ^0^
์ค๋ ๊ฐ์ ๊ฐ๋จํ๊ฒ(?) ์ ๋ฆฌํด๋ณด๋ฉด~!๐คฅ
<3์ฃผ์ฐจ_1๊ฐ>
โ array์ dictionary๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ์ ๊ทผ๋ฒ์ ํ์ฉํ ์ฅ์ ์์๋ณด๊ธฐ
โก ์ค๊ณ๋ฅผ ํ๊ณ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋ง๋๊ฒ ๋๋ ๋ฐ์ดํฐ๋ค์
'๋ชจ๋ธ๋ง์ด ๋์ด์๋ ๋ฐ์ดํฐ'๋ผ๊ณ ํ๋๋ฐ,
๊ฐ์๋ฅผ ํตํด ๋๋ ์ง์ ๋ชจ๋ธ๋ง์ ํด๋ณด๊ธฐ
<3์ฃผ์ฐจ_2๊ฐ>
โ ํ
์ด๋ธ ๋ทฐ์ ์
(cell)์ ์ถ๊ฐํ๊ธฐ, ๊ทธ ์
(cell)์ Label ์ถ๊ฐํ๊ธฐ
โก ๋น๋ ํ, ์คํํ์ ๋ ์ํ๋ ๋ฌธ๊ตฌ๊ฐ ๋ณด์ด๋๋ก ์ฝ๋ ์์ฑํ๊ธฐ
โข ๊น๋ํ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด extension ํ์ฉํ๊ธฐ
<3์ฃผ์ฐจ_3๊ฐ>
โ ๋ค์ด๊ฒ์ด์
์ ํ์ฉํ์ฌ ์ฌ๋ฌ viewcontroller๋ฅผ ์๋ก ์ฐ๊ฒฐํ๊ธฐ
๊ทธ๋ผ ์ด์ ๋ถํฐ '1๊ฐ_๋ฐ์ดํฐ ๊ด๋ฆฌ'๋ถํฐ ์ ๋ฆฌ ์์!!
์ฐ์ , 'PracticeUI'๋ผ๋ ์ด๋ฆ์ผ๋ก ์๋ก์ด Projectํ์ผ์ ๋ง๋ค์๋ค.
ํ ํ๋ฉด์์ ๋ฐ๋ก ๋ณด๋ฉด์ ์์
ํ ์ ์๋๋ก ์๋ฎฌ๋ ์ดํฐ๋ ์ค๋ฅธ์ชฝ์ ํจ๊ป ๋์๋จ๋ค.
๋จผ์ ,
view.backgroundColor = .red
์คํํ์ฌ ์ ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธ!
์ญ์ ํธ๋ฐ์ค ๋ฌ๋ฒ.. ๋ฐ์ดํฐ ๋ง๋ค ๋๋ ๋
๋ค ๋ฐ์คํจ๋ฐ๋ฆฌ ๋ฃ๊ธฐ.๐
let friendName: [String] = ["Fubao", "Aibao", "Lebao"]
๊ทธ๋ฆฌ๊ณ , Label์ ํ๋ ๋ง๋ค์ด์, ์ฝ๋๋ ์ฐ๊ฒฐ๋ ์ ์๊ฒ
cotroll - drag & drop!
(Label ์ด๋ฆ → nameLabel)
๋ง์ฐฌ๊ฐ์ง๋ก Button๋ ํ๋ ์ถ๊ฐ! (Button → Outlet(X), Action(O))
(→ Button ์ด๋ฆ: didTabButton)
์คํ ๋ฆฌ๋ณด๋์ Button์ด๋ฆ์ 'Change Name'์ผ๋ก ๋ณ๊ฒฝ!
var count: Int = 0
( → ์ผ๋จ, ๋ฌด์. ๋ฐ๋ก ๋ค์์ ๋ฐ์คํจ๋ฐ๋ฆฌ ์ด๋ฆ ๋ถ๋ฌ์ฌ ๋ ์ธ ์ฝ๋)
nameLabel.text = "Hello!!"
์ด๋ ๊ฒ ํ๊ณ , ์คํ์์ผ์ ๋ง๋ค์ด๋์ ๋ฒํผ(Change Name)์ ํด๋ฆญํด๋ณด๋,
"Hello!!"๋ก ๋ฐ๋.
nameLabel.text = friendName[count]
(→ ์์ count์ 0์ ๋ฃ์์ผ๋, friendName์ 0๋ฒ์งธ ์ธ "Fubao" ์๋ฏธ.)
๋ค์ ์คํํด์ ๋ฒํผ(Change Name)์ ํด๋ฆญํด๋ณด๋,
"Fubao"๋ก ๋ฐ๋.
๊ทธ๋ผ, friendName์ ์๋ ๋ฐ์ค ํจ๋ฐ๋ฆฌ์ ํ๊ตญ์ด ๋ฒ์ (koreanNames)์ธ
let koreanNames: [String:String] = ["Fubao":"ํธ๋ฐ์ค", "Aibao":"์์ด๋ฐ์ค", "Lebao":"๋ฌ๋ฐ์ค"]
์ ๋ง๋ค๊ณ ,
count = count + 1 ์ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
โป friendName → friendNames (๋ณ๊ฒฝํ์) โป
์ด๋ ๊ฒ ํ๊ตญ์ด ๋ฒ์ ์ ์ด๋ฆ์ผ๋ก ๋ฐ๋.
๋ฒํผ(Change Name)์ ํด๋ฆญํ๋ฉด,
์์๋๋ก "ํธ๋ฐ์ค, "์์ด๋ฐ์ค", "๋ฌ๋ฐ์ค"๋ก ๋ฐ๋์ด ๋์จ๋ค.
๊ทธ๋ผ ์ด์ Label์ 2๊ฐ ๋ ๋ง๋ค์ด์
๊ฐ Label์ ํธ๋ฐ์ค, ์์ด๋ฐ์ค, ๋ฌ๋ฐ์ค๊ฐ ๋์ฌ ์ ์๊ฒ ํด๋ณด๋ ค๊ณ ํ๋ค.
์์ ๊ฐ์ด 2๊ฐ ๋ํ ์ฝ๋์ ์ฐ๊ฒฐํ๋ค.
(๊ฐ Label์ ์ด๋ฆ → bestFriendNameLabel, nextFriendNameLabel)
๊ทธ๋ฆฌ๊ณ ๋ง๋ค์ด ๋์ ๋ฐ์ดํฐ ํ์ฉํด์
nameLabel. text = friendNames[0]
bestFriendNameLabel.text = friendNames[1]
nextFriendNameLabel.text = friendNames[2]
์ด๋ ๊ฒ ์ฝ๋ ์์ฑํด๋ณด์.
์คํํด์ ๋ฒํผ(Change Name)์ ํด๋ฆญํด๋ณด๋ฉด,
์ ํ๋ฉด๊ณผ ๊ฐ์ด ๋ฐ๋๋ค.
๊ทธ๋ฐ๋ฐ, ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด
๊ฐ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฅดํค๊ณ ์๋์ง ์์๋ณด๊ธฐ ํ๋ค๋ค.
๊ทธ๋์ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ์ด ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํ ํ ์ ์๋ค.
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ผ๋ก
struct ํน์ class๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
struct๋ฅผ ํ์ฉํ ์๋ ํ๋ฉด Go!
(๊ธฐ์กด ์ฝ๋์ ๋น๊ตํ๊ธฐ ์ํด์ ๊ฐ ๋ฐ์ค ํจ๋ฐ๋ฆฌ์ ์ด๋ฆ์๋ 2๋ฅผ ๋ถ์.)
์ ํ๋ฉด์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด
๊ธฐ์กด์ ์ฝ๋๋ก ํ๋ , ์ด๋ ๊ฒ ์ฝ๋๋ก ํ๋ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
ํ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ๊ณ์ ์ถ๊ฐ๋๋ค๋ฉด, ์ง๊ธ์ ๋ฐฉ๋ฒ์ด ๋ ์ข๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ง๊ธ๊น์ง
๋ฐ์ดํฐ๋ฅผ ๋ช
๋ช
ํ๊ณ , ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํด์(๋ชจ๋ธ๋ง ํด์)
์์๋ณด๊ธฐ ์ฉ์ดํ๊ฒ ๋ง๋ค์ด๋ดค๋ค.
์ด๊ฒ์ด ๋ฐ๋ก '๋ฐ์ดํฐ ๋ชจ๋ธ๋ง'์ด๋ค.๐
์ด์ '2๊ฐ_ํ
์ด๋ธ ๋ทฐ ๊ตฌํ'์ด๋ค!
ํ
์ด๋ธ ๋ทฐ ๊ตฌํ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋๋ฐ,
์ค๋์ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค.
(์ด๋ฒ ๊ฐ์๋ ๊ธ๋ก๋ง ์ ๋ฆฌํ ์์ )
์ฐ์ตํ ๋ ์๋ ์์๋๋ก ์งํํ๋ฉด ๋๋ค!
โท ์์์ ๋ง๋ค์๋ PracticeUI ํ์ผ ๊ทธ๋๋ก ์งํ.
โท ์๋ก์ด ViewController ์์ฑํ๊ธฐ ('MyTableViewController'๋ผ ํ๊ฒ ์)
โท is initial View Controller๋ก ์ค์ ํ๊ธฐ
โท class์ ์๋ก ๋ง๋ 'MyTableViewController'๋ก ํ ๋นํ๊ธฐ
(↓)ํด๋น ์คํ ๋ฆฌ ๋ณด๋์์ ์งํ(↓)
→ ์คํ ๋ฆฌ ๋ณด๋์์ 'Table view' drag & drop!
→ ์คํํ๋ฉด, ์๋ฌด๊ฒ๋ ๋ณด์ด์ง ์์ผ๋, ๋ฐฐ๊ฒฝ ์์ ์ค์ Go!
→ ์ด์ด์ ์คํ ๋ฆฌ ๋ณด๋์์ 'Table View Cell'์
'Table View' ์์ชฝ์ drag & drop!
→ ์
์ด ๋ณด์ฌ์ง๋ check! (์๋ง ์๋ณด์ผ ๊ฑฐ์)
์ด์ main.storyboard ํ๋ฉด๊ณผ ์๋ก์ด ViewController ๊ฐ์ด ๋์๋๊ณ ์งํ
→ 'Table View'๋ฅผ control๋ก ์ฝ๋์ ์ฐ๊ฒฐ (โท class ~ ๋ฐ์)
→ ์ด๋ฆ์ 'myTableView'๋ผ๊ณ ํ๊ฒ ์.
→ myTableView.backgroundColor = .blue ( โท super. ~ ๋ฐ์)
(์ด๋ ๊ฒ ํด๋ณด๋ฉด ์ฐ๊ฒฐ๋๊ฑฐ ํ์ธ ๊ฐ๋ฅ!)
์ด์ UITableViewDelegate, UITableViewDataSource๋ฅผ ์ถ๊ฐํ ๊ฑฐ์.
("๋๋ ํ
์ด๋ธ ๋ทฐ๊ฐ ๋์ํ์ผ๋ฉด ์ข๊ฒ ์ด. ํ
์ด๋ธ ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ถ์ด.")
์ด๋ฐ ์๋ฏธ์.
class MyTableViewController: UIViewController,
UITableViewDelegate, UITableViewDataSource {
→ ์ด๋ ๊ฒ Go!
(๊ทผ๋ฐ, ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฑฐ์. ์ถ์ฒํด ์ฃผ๋ ๋๋ก Fix ํด๋ฆญ!)
<ํด๋ฆญํ๋ฉด ๋จ๋ ์ฝ๋ ์ฝ์ด๋ณด๊ธฐ>
(์ธ์ธ ์ ์๋ค๋ฉด, ์ดํดํ๊ธฐ ์ํด์.)
"ํ section์ ๋ช ๊ฐ์ row๊ฐ ๋ค์ด๊ฐ์๋ฉด ์ข๊ฒ ์ด?"
→ ์ฒซ ๋ฒ์งธ, code ์๋ฆฌ์๋ 'return ์ํ๋ ๊ฐ์'
ex) return 3
"๊ฐ row๋ง๋ค ์ด๋ค ์
์ด ๋ค์ด๊ฐ์ผ๋ฉด ์ข๊ฒ ์ด?"
→ ๋ ๋ฒ์งธ, code ์๋ฆฌ์๋ cell์ ํ๋ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ค.
let cell = myTableView.dequeueReusableCell(withIdentifier:
"MyFirstCell", for: indexPath)
๋
ธ๋์์ผ๋ก ํ์ํ ๋ถ๋ถ์ ๋น์นธ์ด ์์ ๊ฒ์ด๋ค.
์คํ ๋ฆฌ๋ณด๋ ์ฐ์ธก ์ฐฝ์ ๋ณด๋ฉด 'Identifier'๊ฐ ์์ ๊ฒ์ด๋ค.
๊ฑฐ๊ธฐ์ ์ด๋ฆ ์ ํด์ฃผ๋ฉด ๋๋ค.
ex) "MyFirstCell"
๋ ๋ฒ์งธ ํ์ ์๋ฆฌ์๋ IndexPath๋ฅผ ๋ฃ์ด๋ฌ๋ผ๊ณ ๋์ด ์์ผ๋,
์์ ์ฝ๋์ ์ ํ๋๋ก indexPath
→ ์ด์ ๋ฐํํด์ฃผ๊ธฐ.
return cell (โท ๋ฐ๋ก ๋ฐ์)
→ (super. ~ ๋ฐ์ ์ด์ด์ ์๋ ์ฝ๋ ์ถ๊ฐ)
myTableView.delegate = self
myTableView.dataSource = self
์ด๋ ๊ฒ ํ๊ณ ์คํํ๋ฉด, ์ง์ ํ ๊ฐ์๋งํผ ์
์ด ์๊ฒจ์์!
<์ด์ . extension ํ์ฉํด๋ณด๊ธฐ>
extension(ํ์ฅ)์ ์ด์ฉํด์ ์์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๊ธฐ.
์ด๋ ๊ฒ ํ๋ฉด ํ
์ด๋ธ ๋ทฐ์ ๊ด๋ จ๋ ์ฝ๋๋ค์ ํ ๋์ ๋ณผ ์ ์์.
๋ฐ์ดํฐ๋ฅผ ํ๋ ๋ง๋ค์ด์ ์
์ ๊ตฌํํด ๋ณผ๊ฑฐ์.
(<1๊ฐ>์์ ๋ง๋ค์๋ ๋ฐ์ดํฐ ํ์ฉํ ์์ )
let friendNames: [String] = ["Fubao", "Aibao", "Lebao", "Ruibao", "Huibao"]
( โท class ~ ๋ฐ์)
→ ๊ทธ๋ฆฌ๊ณ 'return ์ํ๋ ์
๊ฐ์' ์๋ฆฌ์
return friendNames.count
์ด์ ์ด๋ฆ์ ๋์ดํด ๋ณด๋ ค๊ณ ํ๋ค.
→ ๋ฐ์ return cell ์์
cell.textLabel.text = "Fubao"
(cell.textLabel?.text = "Fubao" ๋ก ์๋์ผ๋ก ๋ฐ๋๊ฑฐ์)
๊ทธ๋ผ ์์ ํธ๋ฐ์ค~ํ์ด๋ฐ์ค๊น์ง ๋ค ๋์ค๊ฒ ํ๋ ค๋ฉด?
๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค.
→ cell.textLabel.text = friendNames[indexPath.row]
๋ก ๋ฐ๋๋ณด์!
๊ทธ๋ฆฌ๊ณ ๋น๋ Go!!
<๋!๐ฅน>
์ฌ๊ธฐ๊น์ง๊ฐ <2๊ฐ_ํ
์ด๋ธ ๋ทฐ ๊ตฌํ> ๋ด์ฉ์ ์ ๋ฆฌํ ๊ฒ์ด๋ค.
์ด์ <3๊ฐ_๋ค์ด๊ฒ์ด์
๋ฐ ํ๋ฉด ์ ํ> ์ ๋ฆฌ ์์!
๋ค๋น๊ฒ์ด์
์ ํ๋ ์ด์์ ํ๋ฉด์ ์ค๊ณ ๊ฐ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
์์ดํฐ์์ '์ค์ '์ ๋ค์ด๊ฐ๋ณด๋ฉด,
์ํ๋ ๊ณณ์ ๋ค์ด๊ฐ์ ๋, ์ข์ธก ์๋จ์ '๋ค๋ก๊ฐ๊ธฐ ํค'๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.
์ด๊ฒ ๋ฐ๋ก ๋ค์ด๊ฒ์ด์
์ ํ์ฉํ์ฌ ๊ตฌํํ ๊ฒ์ด๋ค. (= Show)
๊ทธ ๋ฐ์๋ ์์ธํ์ด์ง ํ๋ฉด์ ๋ ๋ค๋ฅธ ๋๋์ผ๋ก ๊ตฌํ๋์ด ์๋ค. (= Show Detail)
๋ค๋น๊ฒ์ด์
์ ์ด๋๋ก ๊ฐ์ผํ ์ง ์๋ ค์ฃผ๋ ์ฅ์น์ด๋ค.
์ด๋์ ๋์์ฃผ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ํ๋ฉด์ ๊ณ์ํด์ ์ด๋ํด๋ ๊ธธ์ ์์ง ์์ ์ ์๋ค.
์ด ๊ธฐ๋ฅ ๋ํ Button๊ณผ Label ๋ฑ์ ์ถ๊ฐํ๋ ๊ฒ ์ฒ๋ผ
Show Library์์ ์ถ๊ฐํ ์ ์๋ค.
๊ฒ์ : Navigation Controller
<์ฐ๊ฒฐํ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ>
์ปจํธ๋กค๋ฌ ์๋จ ํด๋ฆญ
ํ๋จ์ ๋๊ทธ๋ผ๋ฏธ ๋๋ฅด๊ณ , Navigation Controller ํด๋ฆญ.
์ดํ์ ์ฐ๊ฒฐํ๊ณ ์ถ์ ViewController๋ฅผ ๊ณ์ ์ถ๊ฐํด์
๋ฒํผ์ ๋ง๋ค๊ณ , drag & drop์ ํ๋ฉด
์ด ์ฐฝ์ด ๋ฌ๋ค!
ํฌ๋งํ๋ ์คํ์ผ๋ก ์ ํํด์ ๋๋ฅด๋ฉด ๋์ด๋ค!
'iOS ์ฑ ๊ฐ๋ฐ ์ข ํฉ๋ฐ > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(3์ผ์ฐจ) (0) | 2024.03.06 |
---|---|
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(2์ผ์ฐจ) (4) | 2024.03.05 |
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(1์ผ์ฐจ) (0) | 2024.03.04 |
1์ฃผ์ฐจ(2) - Swift ๊ธฐ๋ณธ ๋ฌธ๋ฒ / ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ก์ง ์ฐ๊ฒฐ (2) | 2024.02.28 |
1์ฃผ์ฐจ_(1) - Interface Builder & UI ๊ตฌ์ฑ (2) | 2024.02.27 |