- Today
- Total
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- swift
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๊ฐ์ฉ ์์ญ
- Pull
- ๋ฉ๋ชจ์ฅ
- uikit
- ์ปดํจํ
- ํด๋ผ์ฐ๋
- ์ค๋ธ์
- aws
- ๋ฆฌ์
- ์ปค๋ฐ
- ๊ตฌ๊ธ ๊ฒ์ ์ฝ์
- GitHub
- xcode
- commit
- EBS
- ์ ๋๋ฉ์ด์
- Git
- Apple
- ๋ช ๋ น์ด ๋ชจ์์ง
- hig
- swiftui Tutorials
- ์ธ์คํด์ค
- ios
- push
- ์ฃ์ง ๋ก์ผ์ด์
- SwiftUI
- JSON
- s3์ ebs ์ฐจ์ด์
DEV_Larva
HACKING WITH SWIFT - WeSplit(3) ๋ณธ๋ฌธ
๐ง๐ป์ด์ ์๊ฐ์ ์ด์ด์ ์ด๋ฒ ์๊ฐ์๋ ๋์ผํ๊ฒ ๊ณ์ ์งํํด๋ณด๊ฒ ์ต๋๋ค~!
๋ณธ๊ฒฉ์ ์ผ๋ก WeSplit ํ๋ก์ ํธ๋ฅผ ์์ํด๋ณด์!
๋จผ์ @State๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ฑ์ ์ ๋ ฅํ ๊ฒ์ผ๋ก ์์๋๋ ๋ฐ์ดํฐ์ ๋ํด ์์ฑ์ ์ถ๊ฐํด์ผ ํ๋ค.
@State private var checkAmount = 0.0
@State private var numberOfPeople = 2
@State private var tipPercentage = 20
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ๊ธ์ก์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก 0.0, ์ธ์์์ ๊ธฐ๋ณธ๊ฐ์ธ 2, ํ ๋น์จ์ ๊ธฐ๋ณธ๊ฐ์ธ 20์ผ๋ก ์ง์ ํ์ฌ ์งํํ์๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ ๋ํ ๋น์จ์ ๋ค๋ฅด๊ฒ ์ค์ ํ๊ธฐ ์ํด์ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ํ์ ๋ํ ๋น์จ์ 4๋ฒ์งธ ์์ฑ์ผ๋ก ์ถ๊ฐํ์๋ค.
var body: some View {
Form {
Section {
TextField("Amount", value: $checkAmount, format: .currency(code: Locale.current.currencyCode ?? "USD"))
.keyboardType(.decimalPad)
}
Section {
Text(checkAmount, format: .currency(code: Locale.current.currencyCode ?? "USD"))
}
}
}
}
ContentView ๋ด๋ถ์ ์ฝ๋๋ฅผ ํ๋ฒ ์ดํด๋ณด์
๋จผ์ ์ฐ๋ฆฌ๊ฐ ์ด์ ์๊ฐ๋ถํฐ ์์๋ณด์๋ Form๊ณผ Section, TextField๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ๊ธ์ก์ ์ ๋ ฅํ ์ ์๊ฒ๋ ๋ง๋ค์ด ๋ณด์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก ์๋ Section์์๋ ํด๋น ๊ธ์ก์ ๋ํ ์ ํํ ๊ธ์ก์ ๋ฐฑ๋ถ์จ๋ก ํ์ํ์๋ค.
์ฝ๋ ์ค Locale์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ฌ๋ ฅ, ์์ฒ ์๋ฆฌ์ ์ซ์๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ, ๋ฏธํฐ๋ฒ ์ฌ์ฉ ์ฌ๋ถ ๋ฑ ๋ชจ๋ ์ฌ์ฉ์์ ์ง์ญ ์ค์ ์ ์ ์ฅํ๋ iOS์ ๋ด์ฅ๋ ํ๋์ ๊ตฌ์กฐ์ฒด์ด๋ค. ์ดํ ์ฌ์ฉ์์๊ฒ ์ ํธํ๋ ํตํ ์ฝ๋ ์ฐ๋ฆฌ๋๋ผ์ ๊ฒฝ์ฐ "USD"๊ฐ ์๋ "KRW"์ ์ ํํ๊ฒ ์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ "USD"๋ก ๋์ฒดํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ ์คํธ ํ๋์์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ Placeholder๋ก ์ฌ์ฉ๋๋ ๋ฌธ์์ด์ด๋ค. ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ์์ฑ์ ๋ํ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ธ checkAmount์ด๋ค. ์์ ๋ฐฐ์ ๋ฏ์ด ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ฉด ํด๋น ์์ฑ์ด ์ ๋ฐ์ดํธ ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ธ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ํ ์คํธ ์์์ ์ง์ ํ์ฌ ํตํ๋ก ๋ง๋๋ ๋ฐฉ์์ ์ ์ดํ๋ ๋งค๊ฐ ๋ณ์์ด๋ค.
๋ฐ๋ก ์คํ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ ํด๋ณด๋ฉด ๋๋ฒ์งธ ์น์ ์์ ์๋์ผ๋ก ๋ฐ๋ก ๋๊ธฐํ๋ฅผ ํตํด ๋ด๊ฐ ์ํ๋ ์์ ์ ์ํ ํ๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ๊ทธ๋ผ ๋๊ธฐํ๊ฐ ๋ฐ์ ํ๋ ์ด์ ์ ๊ณผ์ ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ์!
- ํ ์คํธ ํ๋์๋ checkAmount์์ฑ์ ๋ํ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ด ์๋ค.
- checkAmount์์ฑ์ @State๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ผ๋ก ๊ฐ์ํ๋ค.
- ์์ฑ์ด ๋ณ๊ฒฝ ๋๋ฉด SwiftUI๋ ์์ฑ์ ๋ค์ ํธ์ถํ๋ค.(ui ๋ค์๋ก๋)
- ๋ฐ๋ผ์ Text view์์ ์ ๋ฐ์ดํธ๋ checkAmount๊ฐ์ ๊ฐ์ ธ์จ๋ค.
์ฌ๊ธฐ์ ํ ์คํธ ํ๋์์ ๋ด๊ฐ ํ์ํ๊ฑด ์ํ๋ฒณ ํค๋ณด๋๊ฐ ์๋ ์ซ์์ ์์์ ์ ํ์ํ . ๋ง ์์ผ๋ฉด ๋๋ค.
๊ทธ๋์ ์ฌ๊ธฐ์ ๋ค๋ฅธ ์ข ๋ฅ์ ํค๋ณด๋๋ฅผ ๊ฐ์ ๋ก ์ ์ฉํ ์์๋ ์์ ์๊ฐ ์๋๋ฐ keyboardType()์ ์ด์ฉํ์ฌ ํค๋ณด๋ ์ข ๋ฅ๋ฅผ ์ง์ ํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๊ณตํด์ฃผ๋ฉด ๋๋ค. ์ด ์ํฉ์์๋ .numberPad ๋ .decialPad ์ธ๋ฐ ๋๊ฐ์ง ๋ค ์ฌ์ฉ์๊ฐ ์ ํํ ์์๋ ๋ฐ์ดํฐ๋ ์ซ์ ๋ฟ์ด์ง๋ง, ์ฐจ์ด๊ฐ ์๋ค. .decialPad์ ๊ฒฝ์ฐ ์ ์ ๋ฟ๋ง ์๋๋ผ $57.50๊ฐ์ ์์์ ๋ ์ ๋ ฅ์ด ๊ฐ๋ฅํด์ง๋ค.
TextField("Amount", value: $checkAmount, format: .currency(code: Locale.current.currencyCode ?? "USD"))
.keyboardType(.decimalPad)
๋ฐ๋ผ์ ์ฒซ๋ฒ์งธ Section์ ํ ์คํธํ๋์ ์์ ์๋ฅผ ์ถ๊ฐํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์คํ ํด๋ณด๋ฉด ํ ์คํธ ํ๋์ ์ซ์๋ง ์ ๋ ฅํ ์์์ด์ผ ํ๋๋ฐ...
์ฝ๋๋ฅผ ๋ค์ ์ดํด ๋ณด๊ธฐ๋ ํ์๊ณ .decialPad ๊ฐ ์๋ .numberPad๋ก๋ ํด๋ณด์์ง๋ง ๊ฒฐ๊ณผ๋ ๋์ผ ํ์๋ค. ๊ทธ๋์ ์๋ ๋ก๊ทธ์ฐฝ์ ํ์ธํด๋ณด๋
Can't find keyplane that supports type 8 for keyboard iPhone-PortraitChoco-DecimalPad; using 27100_PortraitChoco_iPhone-Simple-Pad_Default
๊ณผ ๊ฐ์ ๋ฌธ๊ตฌ๋ฅผ ํ์ธ ํ์๊ณ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ๊ตฌ๊ธ๋ง์ ํด๋ด์ผ๊ฒ ์ฃ ??ํ๊ณ stack overflow์์ ์ฐพ์๋ณด๋ ์์ธ์ ์ ๋ชจ๋ฅด๊ฒ ์ผ๋ ํด๊ฒฐ๋ฒ์ ๋๋ฌด ๊ฐ๋จํ๋ค. iOS Simulator๋ฅผ ์ ํํ ๋ค์
โฌ๏ธโฌ๏ธ
I/O๋ฅผ ์ ํํ๋ฉด ์๋์ ๊ฐ์ด Connect Hardware Keyboard์ ์ฒดํฌ๊ฐ ๋์ด์์ํ ๋ฐ ์ด๊ฑธ ๊บผ์ฃผ๋ฉด???
์ด๋ ๊ฒ ์ํ๋ ์ซ์ ํจ๋๊ฐ ์ ๋์ค๋๊ฒ์ ํ์ธ ํ ์์๋ค.
์ด๋ฒ์๋ ๋ฐ๋ก ์ฌ์ฉ์๊ฐ ์์ฌ ์ธ์ ์ฆ ๋์นํจ์ด ์ธ์์ ์ ํ ํ ์์๋๋ก ํด๋ณด์. ์ฌ๊ธฐ์ ์ด์ ์ ๋ฐฐ์ ๋ Picker์ ForEach๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉฐ ์ ํ ํ ์์๋ ์ฌ๋์ ์๋ 2๋ช ์ด์ 99๋ช ์ดํ๋ก ํ๋ฒ ์ค์ ํด๋ณผ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์ฒซ๋ฒ์งธ Section์ ์ผ๋ถ ์์ ํด๋ณด์๋ค. ๊ทธ ์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
Section {
TextField("Amount", value: $checkAmount, format: .currency(code: Locale.current.currencyCode ?? "USD"))
.keyboardType(.decimalPad)
Picker("Number of people", selection: $numberOfPeople) {
ForEach(2 ..< 100) {
Text("\($0) people")
}
}
}
ํด๋น ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ ์คํ ํด๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณผ ์์๋ค.
์ ์ฌ๊ธฐ์ ์ด์ํ ์ ์ ์ฌ๋ ์๋ฅผ ์ ๋ ฅํ ๋ ค๊ณ ๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ์ด๊ธฐ์ ์ค์ ํด๋์๋ numberOfPeople ์ ์ด๊ธฐ๊ฐ์ ๋ถ๋ช ํ 2์๋ค. ๊ทธ๋ฐ๋ฐ ์ ์ ๊ธฐ์๋ ๊ธฐ๋ณธ๊ฐ์ด 2๊ฐ ์๋ 4์ผ๊น? ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ผ๋ก ์ ํํ ๋ ค๊ณ ํฐ์น๋ฅผ ํด๋ณด๋ฉด ์๋ฌด์ผ๋ ์ผ์ด๋์ง ์๋๋ค.
๋จผ์ ์ด๊ธฐ๊ฐ์ด 2์๋๋ฐ ํ์ฌ ์ถ๋ ฅ๋๋๊ฐ์ด 4์ธ ๊ฒ๋ถํฐ ํด๊ฒฐ ํด๋ณด์๋ฉด
ForEach(2..<100) { ๋ถ๋ถ์์ ์ฐ๋ฆฌ๋ 2์์ 100๊น์ง ๊ณ์ฐ ํ์ฌ ํ์ ๋ง๋ค๋๋ก ํ์๋๋ฐ ์ด๊ฑด 0๋ฒ์งธํ์ "2๋ช "์ด ์ด๋ฏธ ํฌํจ ๋์ด์์ผ๋ฏ๋ก numberOfPeople์ ๊ฐ์ 2๋ฅผ ์ฃผ์์๋ ์ค์ ๋ก๋ "4๋ช "์ธ ์ธ ๋ฒ์งธ ํ์ผ๋ก ์ค์ ํ๋ค๋๊ฒ์ด ๋ฌธ์ ์๋ค. ๋ค๋ฅธ ๋ฌธ์ ๋ก Picker๋ฅผ ์ด์ฉํ์๋๋ฐ๋ ๋ถ๊ตฌ ํ๊ณ ํญ์ ํด๋ ์๋ฌด์ผ๋ ์ผ์ด๋์ง ์์ ๊ฒ์ด๋ค.
์ด๋ ์ฐ๋ฆฌ๊ฐ NavigationView๋ฅผ ์ถ๊ฐ ํ์ง ์๊ณ Picker๋ฅผ ์ด์ฉํ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ NavigationView๋ฅผ ์ถ๊ฐํ๊ณ ๋ค์ ์คํ ํด๋ณด๋ฉด
๋ด๊ฐ ์ํ๋ ์ฌ๋ ์๋ฅผ ์ ํํ ์์๋ ํ์ด์ง๋ก ์ ํ๋๋ฉด์ ์ ํ์ ๋ง์น๋ฉด ์๋์ ์ผ๋ก ์ฌ๋ ์๋ ๋น์ฐํ ๋ด๊ฐ ์ ํํ ์ฌ๋์ ์๋ก ๋ฐ๋๊ฒ๋๋ค.
์ด๋ฒ์๋ ํ ๋น์จ์ ํ์ํ๊ธฐ ์ํด ์ด๋ฏธ ์ถ๊ฐํ 2๊ฐ์ Section ์๋์ ์๋ก์ด Section์ ์ถ๊ฐํด๋ณด์!
Section {
Picker("Tip percentage", selection: $tipPercentage) {
ForEach(tipPercentages, id: \.self) {
Text($0, format: .percent)
}
}
}
์ด๋ ๋ฐฐ์ด์ ๋ชจ๋ ์ต์ ์ ForEach๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์ต์ ์ .percentํ์์ ํ ์คํธ ๋ณด๊ธฐ๋ก ๋ณํ ํ์๋ค. ์ด์ Picker์ ๋์ผํ๊ฒ ์ ์ต์ ํ๋ฉด์ ๋ฃ์ด์ฃผ์๋ค.
๊ทธ๋ ๊ฒ ํ๋ฉด ์ด์ ์ Picker์ ๋์ผํ๊ฒ ์๋ก์ด ํ์ด์ง์์ ๋ค์๊ณผ ๊ฐ์ด ํ ๋น์จ์ ๋ํ ์ ํ์ง๋ฅผ ์ฌ์ฉ์๊ฐ ์ ํ ํ ์์๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฒ์๋ ์ด๋ ๊ฒ ํ์ง๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก Picker๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ์๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด ์๋์ ์ฝ๋๋ง ์ถ๊ฐ ํ๋ฉด ๋๋ค.
.pickerStyle(.segmented)
๊ทธ๋ผ ์ด๋ป๊ฒ ๋๋์ง ๋ฐ๋ก ๊ฒฐ๊ณผ ํ๋ฉด์ผ๋ก ์ฐจ์ด์ ์ ๋น๊ตํด๋ณด์.
์๋ง๋ ์ Section์ ์๋ Picker์ ๋น๊ตํด๋ณด๋ฉด ๋ ์ฝ๊ฒ ์ฐจ์ด์ ์ ์ ์์์๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ฌ์ฉ์๊ฐ ๋ ์ดํดํ๊ธฐ ์ํด์ Section์ ๋จธ๋ฆฌ๊ธ์ ์ถ๊ฐ ํด๋ณด์.
์ฌ์ฉ์์๊ฒ ์ผ๋ง๋ ํ์ ๋จ๊ธธ๊ฒ์ธ์ง์ ๋ํ ์ง๋ฌธ์ ๋ฏธ๋ฆฌ ํจ์ผ๋ก์ ํด๋น Picker๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ์ ์์๋ค.
๋ฐ๋ก ์ถ๊ฐํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด์!
๋ง์ง๋ง ํํธ์์๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ธ์ก๊ณผ ์ ๊ณตํ ํ ๋น์จ์ ์ ํ๋ ๋ถ๋ถ, ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ๊ทธ์ ์ ๋ํ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ก ํ์ฌ๋๋น ๋ด์ผํ๋ ๊ธ์ก์ ๊ณ์ฐ ํ๋ ๋ถ๋ถ์ ๊ฐ๋ฐ ํ๋ฉด์ ๋ง๋ฌด๋ฆฌ ์ง์ด ๋ณด์.
์ด ๋ถ๋ถ์์๋ ์ฝ๊ฐ์ ๊ณ์ฐ์ด ํ์ํ๋ฐ 1์ธ๋น ์ง๋ถํด์ผ ํ๋ ์ด ๊ธ์ก์ ์ฃผ๋ฌธ ๊ธ์ก์ ํ ๋น์จ์ ๋ํ ๊ฐ์ ์ธ์์๋ก ๋๋ ๊ฐ๊ณผ ๊ฐ๋ค.
1์ธ๋น ์ง๋ถ ๊ธ์ก = ์ฃผ๋ฌธ๊ธ์ก + ํ / ์ธ์ ์
์ด์ ์ ๋ฌธ์ ์๋ ๊ณ์ฐ ์ธ์์ ์ ์ ํ ๋ numberOfPeople์ด ์ด๋ฏธ +2 ๋งํผ ์ฐจ์ด ๋ฌ๋๊ฒ ์ฒ๋ผ ๊ฐ 3๋ช ์ ์ ์ฅ ํ ๋ 5๋ช ์ ์๋ฏธํ์๋๋ฐ
๋ฐ๋ผ์ ์๋ก์ด ์์ฑ์ธ totalPerPerson์ ๋ง๋ค๊ฑฐ๋ค. ์ด๋ Doubleํ์ผ๋ก ์ ๋ ฅ๋ฐ์ ๊ฒ์ด๋ค.
var totalPerPerson: Double {
let peopleCount = Double(numberOfPeople + 2 )
let tipSelection = Double(tipPercentage)
let tipValue = checkAmount / 100 * tipSelection
let grandTotal = checkAmount + tipValue
let amountPerPerson = grandTotal / peopleCount
return amountPerPerson
}
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ numberOfPeople์ ์ฝ๊ณ ๊ฑฐ๊ธฐ์ 2๋ฅผ ๋ํ๋ฉด์ ์ผ๋ง๋ 2์์ 100๊น์ง์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ง ์ค์ ๋ก๋ 0์์ ๊ณ์ฐ ๋๋ค๋๊ฒ์ ์๊ฒ ๋๋ค. ๊ฒฐ๊ณผ๊ฐ์ Double๋ก ๋ณํ ํด์ผํ๋๋ฐ ์ด๋ checkAmount์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๋ค. ์๋ ์ค์ tipSelection ๋ํ ๋์ผ ํ๋ค.
tipSelection๊ฐ์ 100์ผ๋ก ๊ณฑํ๊ณ checkAmount ์ผ๋ก ๋๋๊ฐ์ tipValue์ ์ ์ฅ ํด๋์.
๊ทธ๋ฆฌ๊ณ ํ๊ฐ์ checkAmount์ ์ถ๊ฐํ์ฌ ๊ธ์ก์ ์ด ํฉ๊ณ๋ฅผ ๊ณ์ฐ ํ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ก์ peopleCount๋ก ๋๋ ์ 1์ธ๋น ๊ธ์ก์ ๊ณ์ฐ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ์ return 0 ์๋๊ฒ์ anountPerPerson์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
์ด์ ์ด์ ์
Section {
Text(checkAmount, format: .currency(code: Locale.current.currencyCode ?? "USD"))
}
์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋ฐ๊ฟ์ฃผ์.
Section {
Text(totalPerPerson, format: .currency(code: Locale.current.currencyCode ?? "USD"))
}
์ง๊ธ๊น์ง ํ ๋ถ๋ถ์ ํ๋ฒ ๊ฒฐ๊ณผ๋ก ํ์ธ ํด๋ณด์.
์ด์ ๋ค์๋ค. ๋ง์ง๋ง์ผ๋ก ์๊น๋ถํฐ ๊ณ์ ๊ฑฐ์ฌ๋ฆฌ๊ฒ ํ๋ ํค๋ณด๋์ ๊ดํ ๊ฒ์ธ๋ฐ, ์ด์ ์๋ ์๋ ์ ๋๋ฆฌ ์ณค์๋๋ฐ ์ด๋ฒ์๋ ํ๋ฒ ์ฌ๋ผ์จ ํค๋ณด๋๋ ๋ค์ ๋ด๋ ค๊ฐ์ง ์๋๊ฒ์ด ๋ฌธ์ ๊ฐ ๋์๋ค. ์ด๊ฑด ๋ค๋ฅธ ํ์ด์ง, ์๋ฅผ ๋ค๋ฉด Pickerํ์ด์ง๋ก ๋ณ๊ฒฝ ๋์๋ค๊ฐ ๋์์๋ ๋ณํจ ์์ด ํค๋ณด๋๋ ์ฌ๋ผ์ง์ง์์๋ค. ๊ทธ๋์ ์ด๋ฒ์๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด์!
@FocusState private var amountIsFocused: Bool
ํด๋น ์ ์์ฑ์ ContentView์ ์ถ๊ฐ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์คํธ ํ๋์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ ธ ์์๋๋ true, ์๋๋ฉด false๊ฐ ๋๋๋ก ํ ์์๋ค. ๊ทธ๋์ ์๋ ์ฝ๋๋ฅผ TextField์ ์ถ๊ฐ ํ๋ฉด SwiftUI๋ ํ ์คํธ ํ๋์ ํ์ฌ ํฌ์ปค์ค๊ฐ ์์ด์ผ ํ๋์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ์์์ ํ๋จํ๊ณ ๊ฒฐ์ ํ๊ฒ ๋๋ค. ์ด๊ฑธ SwiftUI๊ฐ ์๊ณ ์ดํ ์ฌ์ฉ์๊ฐ ์ํ ๋ ํฌ์ปค์ค๋ฅผ ์ ๊ฑฐ ํ๊ธฐ ์ํด์ ์ฐ๋ฆฌ๋ ์ถ๊ฐ์ ์ผ๋ก ๋ฒํผ์ ์ถ๊ฐ ํ ๊ฒ์ด๋ค.
๊ทธ๋ผ ๋ฐ๋ก ๋ง๋ค์ด ๋ณด์!
์ด์ ์ WeSplit์ด๋ผ๋ navigationTitle์ ์ถ๊ฐํ์ ์ด ์๋ค. ์ฌ๊ธฐ์
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Button("Done") {
amountIsFocused = false
}
}
}
๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐ ํ ๊ฒ์ธ๋ฐ, ๊ฐ์ค์ ์ญํ ์ ํ๋ฒ ์ฒ์ฒํ ์ดํด ๋ณด์
- toolbar()๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด๊ธฐ์ ๋ํ ๋๊ตฌ ๋ชจ์ ํญ๋ชฉ์ ์ง์ ํ ์์๊ฒ ๋๋ค.
- ToolbarItemGroup์ ํน์ ์์น์ ํ๋ ์ด์์ ๋ฒํผ์ ๋ฐฐ์น ํ ์์๋ค. ์ฌ๊ธฐ์ ํค๋ณด๋์ ๋ํ ๋๊ตฌ ๋ชจ์์ผ๋ก ์ง์ ํด์ผ๋ง ํค๋ณด๋์ ๋ถ์ด์ ํจ๊ป ๋ํ๋ฌ๋ค๊ฐ ์์ด์ก๋ค๊ฐ ํ ์์๊ฒ ๋๋ค.
- Done์ด๋ผ๋ ํ ์คํธ์ ํจ๊ป ๋ฒํผ์ ๋๋ ์๋ amountIsFocused๊ฐ ํค๋ณด๋๊ฐ ๋ซํ๋๋ก false๋ก ์ค์ ๋๋ค. ๊ทธ๋์ผ ํฌ์ปค์ค๊ฐ ํ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก Spacer()๋ฅผ ToolbarItemGroup์ ๋ฒํผ ์ฌ์ด์ ๋์ด์ ์ด์ ๋ณด๋ค ์ ์ฐํ ๊ณต๊ฐ์ ์ ๊ณต ํ์ฌ ๋๊ตฌ ๋ชจ์์์ ๋ฒํผ์ด ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ๋ ค๋๊ฒ ๋๋ค. ๊ทธ๋ ๊ฒ ํด์ ๋ง์ง๋ง ๊ฒฐ๊ณผ๋ฌผ์ ํ์ธ ํด๋ณด๋ฉด???
์ ๊ธฐ ํค๋ณด๋์ ๋ถ์ด์๋ Done๋ฒํผ์ ๋๋ฅด๋ฉด ํค๋ณด๋๊ฐ ์๋ด๋ ค๊ฐ๋๊ฒ์ ํ์ธ ํ ์์์ผ๋ฉฐ, ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ธฐ ์ํด TextField๋ฅผ ๋๋ฅด๋ฉด ํค๋ณด๋๊ฐ ์ฌ๋ผ์ค๋๊ฒ์ ํ์ธ ํ ์์์ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋๋ผ๋ ํ์ ๋ํ ๋ฌธํ๊ฐ ๋ง์ด ์ ์ฐฉ ๋์ด ์์ง ์๊ณ ์ฑ ๋ด ํตํ ๊ธฐ์ค๋ ์ฐ๋ฆฌ๋๋ผ์ฒ๋ผ "์"์ด ์๋ "๋ฌ๋ฌ"๋ก ํ์ ๋์ด์์ง๋ง, ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด์ ๊ฐ๋จํ ๊ธฐ๋ฅ์ด์ง๋ง ์๊ฐ ๋ณด๋ค ์ป์ ์ ๋ณด๋ค์ด ๋๋ฌด ๋ง์๋๊ฒ ๊ฐ๋ค. ์ด ๋ค์ ์๊ฐ์๋ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํ๊ฒ ์ง๋ง ํ๋ฒ ๋ ๋ฆฌ๋ทฐํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ ๋ณด๋๊ฒ๋ ์ข์๊ฒ ๊ฐ๋ค. ์ด๊ฒ์ผ๋ก WeSplitํ๋ก์ ํธ๋ ๋!
learning by repetition
'SwiftUI & UIKit > Tutorials' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HACKING WITH SWIFT - Guess the Flag(3) (0) | 2022.09.03 |
---|---|
HACKING WITH SWIFT - Guess the Flag(2) (0) | 2022.09.03 |
HACKING WITH SWIFT - Guess the Flag (0) | 2022.08.31 |
HACKING WITH SWIFT - WeSplit(2) (0) | 2022.08.18 |
HACKING WITH SWIFT - WeSplit (0) | 2022.08.17 |