这篇文章介绍了如何使用SwiftUI创建分段控件、改变文本字段获得焦点时显示的键盘类型,并提供了三个挑战以扩展应用程序。另外,文章还提到了SwiftUI在每个父级内部最多允许10个子级视图的限制及解决方法。
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉SwiftUI在每个父级内部最多允许10个子级视图
如果要添加更多内容,则应将视图放入组中。Group{}
使用SwiftUI中的选择器视图创建分段控件
当我们在.pickerStyle(SegmentedPickerStyle())
修改器上应用修改器时,它们会采用分段样式。
keyboardType()让我们改变在文本字段获得焦点时显示的键盘
有很多选项可供选择,包括数字键盘,十进制键盘等等。
.numberPad 数字键盘
.decimalPad 带小数点的数字键盘
挑战
将昨天的代码进行完善,挑战题目如下:
最好的学习方法之一是尽可能多地编写自己的代码,因此,你应该尝试以下三种方式扩展此应用程序,以确保你完全了解正在发生的事情:
- 在第三部分添加标题,即“每人的金额”
- 添加另一部分以显示支票的总金额,即原始金额加上小费值,而不用人数来划分。
- 将“人数”选择器更改为文本字段,确保使用正确的键盘类型。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
import SwiftUI
struct ContentView: View { @State private var checkAmount = "" @State private var numberOfPeopleString = "" @State private var numberOfPeople = 2 @State private var tipPercentage = 2 let tipPercentages = [10, 15, 20, 25, 0] var sumMoney: Double { let tipSelection = Double(tipPercentages[tipPercentage]) let orderAmount = Double(checkAmount) ?? 0 let tag1 = orderAmount * tipSelection / 100 let tag2 = tag1 + orderAmount return tag2 } var totalPerPerson: Double { let tag2 = sumMoney let peopleCount = Double(numberOfPeopleString) ?? 0 let tag3 = tag2 / peopleCount return tag3 } var body: some View { NavigationView { Form { Section { Text("Hello World") TextField("Amount", text: $checkAmount) .keyboardType(.decimalPad) } Section (header: Text("Number of people")){ TextField("Fill in the number of people", text: $numberOfPeopleString) .keyboardType(.numberPad) } Section(header: Text("How much tip do you want to leave?")) { Picker("Tip Percentage", selection: $tipPercentage) { ForEach(0 ..< tipPercentages.count) { Text("\(self.tipPercentages[$0])") } }.pickerStyle(SegmentedPickerStyle()) } Section(header: Text("Total amount of money")) { Text("$\(sumMoney, specifier: "%.2f")") } Section(header: Text("Amount per person")) { Text("$\(totalPerPerson, specifier: "%.2f")") } } .navigationBarTitle("WeSplit") } } }
struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
|
参考资料
查看下一天的SwiftUI学习笔记
关于100days英文课程