Skip to content

Commit 33df2a8

Browse files
committed
iOS: dismiss the number keyboard in the Calculator (Done toolbar + swipe-to-dismiss)
1 parent 66dbeee commit 33df2a8

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

ios/OpenProgression/Features/Calculator/CalculatorView.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ struct CalculatorView: View {
1414
@State private var bodyweight: String = ""
1515
@State private var useBW = false
1616
@State private var inputs: [String: String] = [:]
17+
@FocusState private var fieldFocused: Bool
1718

1819
private let ageBands = ["18-29","30-39","40-49","50+"]
1920

@@ -46,14 +47,21 @@ struct CalculatorView: View {
4647
.animation(.snappy, value: useBW)
4748
}
4849
.background(Theme.bg.ignoresSafeArea())
50+
.scrollDismissesKeyboard(.interactively)
51+
.toolbar {
52+
ToolbarItemGroup(placement: .keyboard) {
53+
Spacer()
54+
Button("Done") { fieldFocused = false }.bold().tint(Theme.primary)
55+
}
56+
}
4957
}
5058

5159
private var controls: some View {
5260
VStack(spacing: 10) {
5361
Picker("", selection: $gender) { Text("Male").tag(Gender.male); Text("Female").tag(Gender.female) }.pickerStyle(.segmented)
5462
Picker("", selection: $ageBand) { ForEach(ageBands, id: \.self) { Text($0).tag($0) } }.pickerStyle(.segmented)
5563
HStack(spacing: 10) {
56-
TextField("Bodyweight (kg)", text: $bodyweight).keyboardType(.numberPad)
64+
TextField("Bodyweight (kg)", text: $bodyweight).keyboardType(.numberPad).focused($fieldFocused)
5765
.padding(.horizontal, 14).padding(.vertical, 10)
5866
.background(Theme.surface, in: Capsule()).overlay(Capsule().strokeBorder(Theme.stroke))
5967
HStack(spacing: 0) {
@@ -108,6 +116,7 @@ struct CalculatorView: View {
108116
Spacer()
109117
if let lvl, let lv = store.level(number: lvl) { LevelPill(name: lv.shortName, number: lvl) }
110118
TextField(placeholder(c.benchmark), text: Binding(get: { inputs[c.id] ?? "" }, set: { inputs[c.id] = $0 }))
119+
.focused($fieldFocused)
111120
.keyboardType(c.benchmark.testType == "time" ? .numbersAndPunctuation : .numberPad)
112121
.multilineTextAlignment(.trailing).frame(width: 86)
113122
.padding(.horizontal, 12).padding(.vertical, 9)

0 commit comments

Comments
 (0)