๐จ UIKit & SwiftUI
15
iOS UI ๊ฐ๋ฐ์ ํ์ํ UIKit๊ณผ SwiftUI ๊ด๋ จ ๋ด์ฉ์ ์ ๋ฆฌํฉ๋๋ค.
[UIKit] UI ์
๋ฐ์ดํธ "ํด์ค", ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ฑ์ ๋ง๋ค๋ค ๋ณด๋ฉด ์ข
์ข
์๋์ ๊ฐ์ ์ํฉ์ ๊ฒช๊ฒ ๋๋ค.๋ฒํผ์ ๋๋ ์ ๋ ๊ฐ์ ์ด๋์ ์๋ ค์ค์ผ ํ์ง?โโViewModel์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ View์ ์๋ ค์ฃผ์ง?โโ์ํ๊ฐ ๋ฐ๋์๋๋ฐ, View๋ ์ ๊ฐ๋งํ ์์ง...?โ์ด๋ด ๋ ํ์ํ ๊ฒ ๋ฐ๋ก ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ผ๋ก, ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ฉด UI์ ๋ฐ์๋๋๋ก ์ฐ๊ฒฐํด์ฃผ๋ ์ผ์ข
์ "ํ์ดํ ๋ผ์ธ"์ด๋ค.์ฌ๊ธฐ์์๋ UIKi
[UIKit] UIView์ tag ์ฌ์ฉ์ด ์ํฐํจํด์ธ ์ด์ ์ ๋์UIKit์์ UIButton.tag๋ฅผ ํ์ฉํ์ฌ ๋ฒํผ์ ๊ตฌ๋ถํ ์ ์ด ์์๋๋ฐ, ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํตํด ์ํฐํจํด์์ ์๊ฒ ๋์๋ค. ์ด ๊ธ์ tag๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฌธ์ ๊ฐ ๋๋์ง, ๋์์ ๋ฌด์์ด ์๋์ง ๊ธฐ๋กํ๋ค.UIButton.tag๋?UIKit์์ tag๋ UIView์ ์์ฑ์ผ๋ก, ๊ฐ๋ฐ์๊ฐ ์ ์(Int) ๊ฐ์ ๋ถ์ฌํ์ฌ ํน์ ๋ทฐ๋ฅผ ์๋ณํ ์ ์๋๋ก ์ค๊ณ๋์๋ค.le
[UIKit] ๊ทธ๋ผ๋ฐ์ด์
ํจ๊ณผ ์ ์ฉํ๊ธฐiOS์์๋ CAGradientLayer๋ฅผ ํ์ฉํ์ฌ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ๊ทธ๋ผ๋ฐ์ด์
์ ์ ์ฉํ ์ ์๋ค.CAGradientLayer๋?CAGadientLayer๋ Core Animation์ ํ์ ํด๋์ค๋ก, UIView์ ๋ฐฐ๊ฒฝ์ ๋ถ๋๋ฌ์ด ์์ ์ ํ(๊ทธ๋ผ๋ฐ์ด์
ํจ๊ณผ)์ ์ถ๊ฐํ ๋ ์ฌ์ฉ๋๋ค.์ฃผ์ ํน์ง์ฑ๋ฅ ์ต์ ํ: GPU์์ ๋ ๋๋ง๋์ด ์ฑ๋ฅ์ ์ํฅ์ ์ต์ํํจ๋ค์ํ ์์
[UIKit] ScrollView์์ touchesBegan์ด ํธ์ถ๋์ง ์๋ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ๋ฌธ์ ์ํฉUIKit์ ์ฌ์ฉํ์ฌ UIScrollView ๋ด๋ถ์์ ํฐ์น ์ด๋ฒคํธ(touchesBegan)๊ฐ ํธ์ถ๋์ง ์๋ ์ด์๊ฐ ๋ฐ์ํ ์ ์๋ค. ํนํ, UITextField๋ UITextView๊ฐ ํฌํจ๋ ScrollView์์ ํค๋ณด๋๋ฅผ ๋ซ๊ธฐ ์ํด ํฐ์น ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๋ ค ํ ๋ ์ด ๋ฌธ์ ๊ฐ ์ข
์ข
๋ฐ์ํ๋ค.๋ฌธ์ ์ ์์ธ:UIScrollView๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํฐ์น์ด๋ฒคํธ๋ฅผ
[UIKit] SnapKit์ผ๋ก iOS ์คํ ๋ ์ด์์์ ๊ฐํธํ๊ฒ ์ ์ฉํ์!iOS ์ฑ ๊ฐ๋ฐ์์ UI๋ฅผ ๋ง๋ค ๋ ์คํ ๋ ์ด์์(Auto Layout)์ ์ค์ ํ๋ ๊ฒ์ ํ์๋ค.ํ์ง๋ง ์คํ ๋ฆฌ๋ณด๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ฝ๋๋ก ์คํ ๋ ์ด์์์ ์ ์ฉํ๋ ๊ฒ์ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๋ณต์กํด์ง ์ ์๋ค.SnapKit์ด๋ผ๋ ๊ฐ๋ ฅํ ์คํ ๋ ์ด์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.SnapKit์ด๋?SnapKit์ Swift์์ ์คํ ๋ ์ด์์์ ๊ฐ๋จํ๊ฒ
[UIKit] UITableViewCell์์ dequeueReusableCell ์ฌ์ฉ ์ ๋ฐ์ํ๋ ๋ฌธ์ ํด๊ฒฐUITableView์์ dequeueReusableCell(withIdentifier:)๋ฅผ ์ฌ์ฉํ ๋ ์๋ชป๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ฉด ์ฑ์ด ํฌ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.์ด ๊ธ์์๋ dequeueReusableCell ๊ด๋ จ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.๋ฌธ์ ์ํฉUITableView์์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.Fatal error: Unexpectedly foun
[UIKit] UITableView์์ ๋ฐ์ดํฐ ์ญ์ ํ โIndex out of rangeโ ์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒUITableView์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋ Index out of range ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.๋ค๋ค ์๋ค์ํผ ์ด ์ค๋ฅ๋ Index๊ฐ ์ค์ ๋ ๋ฒ์๋ฅผ ๋์ด๋ฒ๋ฆด ๊ฒฝ์ฐ ๋ฐ์๋๋ ์๋ฌ์ด๋ค.๋์ ๊ฒฝ์ฐ์ ๋ฐฐ์ด์ ์์๊ฐ ์ ๊ฑฐ๋ ์ํ์์ ์ ๊ทผ์ ์๋ํ์ฌ ๋ฐ์ํ๋ค.์ด ๊ธ์์๋ ์ด ์ค๋ฅ์ ์์ธ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.๋ฌธ์ ์ํฉํ
์ด๋ธ์์ deleteRows(at:w
[UIKit] UIKit ํ๋ ์์ํฌ์ ๋ํ ๊ธฐ๋ณธ๊ธฐ ํ์ต (UI์ ๋ก์ง ์ฐ๊ฒฐํ๊ธฐ)UIKit์ด๋UIKit์ iOS ์ฑ ๊ฐ๋ฐ์ ์ํ ํต์ฌ ํ๋ ์์ํฌ๋ก, UI ์์ ๋ฐ ์ด๋ฒคํธ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ค. UIKit์ ํ์ฉํ๋ฉด ๋ฒํผ, ๋ ์ด๋ธ, ํ
์ด๋ธ ๋ทฐ ๋ฑ์ UI ์์๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ณ , ํ๋ฉด ์ ํ ๋ฐ ์ฌ์ฉ์ ์
๋ ฅ์ ์ฒ๋ฆฌํ ์ ์๋ค.์ฃผ์ UI ๊ตฌ์ฑ ์์UIView: ๋ชจ๋ UI ์์์ ๊ธฐ๋ณธ ํด๋์คUILabel: ํ
์คํธ๋ฅผ ํ์ํ๋ ๋ ์ด๋ธUIButton:
[UIKit] ์ฝ๋๋ก UITextField Placeholder ์ค์ ํ๊ธฐํ์ฌ ๊ฐ๋ฐ ์ค์ธ ์ฑ์ UITextField ์ UITextView ๋ฅผ ํ ํ๋ฉด์์ ์ฌ์ฉํ๊ณ ์๋ค. ๋ ๋ชจ๋์ Placeholder๋ฅผ ์ ์ฉํ๋๋ฐ, UITextField ๋ Attribute Inspector์์ Placeholder ์ต์
์ด ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ์ค์ ํ๊ณ , UITextView ๋ ์ด ๋ฐฉ๋ฒ์ ํตํด ์ฝ๋๋ก ๊ตฌํํ๋ค.ํ
์คํธ๋ฅผ ํ๋ค๋ณด๋ ์ด์๋ฅผ ํ๋ ๋ฐ๊ฒฌํ
[UIKit] UITableView์์ Cell ์ถ๊ฐ/์์ ์ ํ๋์ View์์ ์ฒ๋ฆฌํ๊ธฐTo Do List ์ฑ์ ์๋ก์ด ํ ์ผ์ ์ถ๊ฐํ ๋, ๋ด์ฉ์ ์
๋ ฅํ๊ธฐ ์ํ View๋ฅผ ๊ตฌํํ๋ค. ์ดํ์ ์ด๋ฏธ ์ถ๊ฐ๋ ํ ์ผ์ ์์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๊ณ ๋ณด๋, ๊ธฐ์กด View๋ฅผ ํ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.์ฆ, UITableViewCell ์ ๋ฐ์ดํฐ๋ฅผ View๋ก ์ ๋ฌํด์ ๊ธฐ์กด์ ๊ฐ์ด ์
๋ ฅ๋๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ ํ๋ค.์คํ ๋ฆฌ๋ณด๋์์ UITabl
[UIKit] UITableView์์ ๋ฐ์ดํฐ ์์ ๋ ๋ฉ์์ง ํ์ํ๊ธฐTo Do List ์ฑ์ ๊ฐ๋ฐ์ค์, UITableView ์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ "ํ ์ผ์ ์ถ๊ฐํ๋ผ"๋ ๋ฉ์์ง๋ฅผ ์ค์์ ํ์ํ๊ณ ์ถ์๋ค.(์๋ฅผ ๋ค๋ฉด, ์๋ ๋ฐฐ๋ฏผ์ ์ฅ๋ฐ๊ตฌ๋ ๊ฐ์?)ํ์ง๋ง UITableView ์๋ Empty State๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ์๊ธฐ์ ์๋์ ๋ฐฉ๋ฒ์ผ๋ก ์ง์ ๊ตฌํ์ ์๋ํ๋ค.UITableViewCell ์ ๋ง๋ค์ด์ Empty ์
[UIKit] UITextView์ Placeholder ์ ์ฉํ๋ ๋ฐฉ๋ฒUITextField ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Placeholder ์์ฑ์ด ์์ง๋ง, UITextView ์๋ Placeholder ๊ธฐ๋ฅ์ด ์๋ค. ๋ฐ๋ผ์, UITextView ์ Placeholder๋ฅผ ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ง์ ๊ตฌํํด์ผ ํ๋ค.Placeholder๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ํด๋ดค๋ค.Attribute Inspector์์ Placeholder ์์ฑ
[UIKit] ์ฑ ์คํ ์ Date Picker ์ค๋ฅธ์ชฝ ์ ๋ ฌ๋๋ ๋ฌธ์ ํด๊ฒฐํ๊ธฐStack View ์ Date Picker ๋ฅผ ๋ฐฐ์นํ๊ณ , Attribute Inspector์์ Alignment๋ฅผ Left๋ก ์ค์ ํ์์๋, ์ฑ ์คํ ์ Date Picker ๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ๋ ฌ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.์ด์ ์ฌํUIDatePicker ๋ฅผ UIStackView ์์ ์ถ๊ฐUIDatePicker ์ Alignment ์์ฑ์ Left(Leading)
ํ๊ทธ
SwiftiosUIKitData Binding
์ต๊ทผ ๋๊ธ
์์ง ๋๊ธ์ด ์์ด์