使用picker点击没反应

需要一个navigationview{}视图。

SwiftUI 想要做的事情-这也是为什么在行的右边缘添加了灰色显示指示器的原因-展示了一个带有选择器选项的新视图。为此,我们需要添加一个导航视图,该导航视图执行以下两项操作:在顶部留出一定空间以放置标题,并根据需要让iOS在新视图中滑动。

因此,直接在表单add之前NavigationView {,以及在表单的右括号之后添加另一个右括号。如果操作正确,则代码应如下所示:

1
2
3
4
5
6
7
var body: some View {
NavigationView {
Form {
// everything inside your form
}
}
}

Form中的Section项目添加描述文本(分组标题)

为Section添加header属性

1
2
3
4
5
6
7
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())
}

Double值如何省略多余的小数/减小精度(多余的0)

在完成之前,我们将修复界面的一个小问题,即总价的显示方式。我们使用a Double进行金额计算,这意味着Swift给我们的精度超出了我们所需的精度–我们希望看到的像是$ 25.50,而是看到了$ 25.500000。

我们可以通过使用SwiftUI添加的整洁的字符串插值功能来解决此问题:决定字符串内部数字格式的能力。这实际上可以追溯到C编程语言,因此语法起初有点奇怪:我们编写了一个称为说明符的字符串,其值为“%.2f”。这是C的语法,表示“两位数的浮点数”点数。”

粗略地说,“%f”表示“任何浮点数”,在我们的情况下,它将是整数。另一个选择是“%g”,它执行相同的操作,只是从末尾删除了不重要的零-$ 12.50将被写为$ 12.5。要求将“ .2”放入混音中是要求小数点后两位数字,而不管它们是什么。SwiftUI足够聪明,可以对它们进行智能舍入,因此我们仍然可以获得很好的精度。

你可以在Wikipedia上了解有关这些C样式格式说明符的更多信息:https : //en.wikipedia.org/wiki/Printf_format_string –我们不打算其他任何人,因此只要你想满足好奇心就可以在这里!

无论如何,我们希望每人使用我们的新格式说明符,所以请修改总文本视图为:

1
Text("$\(totalPerPerson, specifier: "%.2f")")

今日代码

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
//
// ContentView.swift
// WeSplit
//
// Created by 张洪 on 2020/1/16.
// Copyright © 2020 张洪. All rights reserved.
//

import SwiftUI

struct ContentView: View {
@State private var checkAmount = ""
@State private var numberOfPeople = 2
@State private var tipPercentage = 2
let tipPercentages = [10, 15, 20, 25, 0]

var totalPerPerson: Double {
let peopleCount = Double(numberOfPeople + 2)
let tipSelection = Double(tipPercentages[tipPercentage])
let orderAmount = Double(checkAmount) ?? 0

let tag1 = orderAmount * tipSelection / 100
let tag2 = tag1 + orderAmount
let tag3 = tag2 / peopleCount

return tag3
}

var body: some View {
NavigationView {
Form {
Section {
Text("Hello World")
TextField("Amount", text: $checkAmount)
.keyboardType(.decimalPad)
}

Section {
Picker("选择人数", selection: $numberOfPeople) {
ForEach(2..<100) {number in
Text("\(number) people")
}

}
}

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 {
Text("$\(totalPerPerson, specifier: "%.2f")")

}

}
.navigationBarTitle("WeSplit")
}
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

参考资料

查看下一天的SwiftUI学习笔记

关于100days英文课程