Add a way to dismiss the keyboard on iOS

NumericField's .decimalPad/.numberPad keyboards have no Return/Done
key of their own, and there was previously no way to dismiss them
once shown. Tried .scrollDismissesKeyboard(.interactively) alone
first, but it's unreliable in a Form: sections without .onMove/
.onDelete (Price Source, Bitcoin) don't consistently wire up the
drag-to-dismiss gesture, so it only worked when dragging within the
Currencies section. Adds a "Done" button to the keyboard toolbar as a
deterministic fallback that works from any field, keeping the scroll
dismissal too since it's a free bonus where it does work.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FXcrACM5sok3M1KQJ8kByy
This commit is contained in:
2026-09-12 11:55:56 +03:00
co-authored by Claude Sonnet 5
parent 92bd63d07b
commit c6e54e6536
+22
View File
@@ -26,7 +26,29 @@ struct ContentView: View {
EditButton() EditButton()
} }
} }
// NumericField's .decimalPad/.numberPad keyboards have no Return/Done key of
// their own (unlike a standard text keyboard). `.scrollDismissesKeyboard` alone
// isn't a reliable substitute here Form's sections without .onMove/.onDelete
// (Price Source, Bitcoin) don't consistently wire up the drag-to-dismiss gesture,
// so it only ever worked when dragging within the Currencies section. This is a
// deterministic fallback that works regardless of which field is focused.
ToolbarItemGroup(placement: .keyboard) {
Spacer()
Button {
UIApplication.shared.sendAction(
#selector(UIResponder.resignFirstResponder),
to: nil,
from: nil,
for: nil
)
} label: {
Text(IosLocalizationKt.localizedString(resource: MR.strings.shared.done))
}
}
} }
// Kept alongside the Done button above: a free bonus in the Currencies section,
// where it does work reliably (see the toolbar comment for where it falls short).
.scrollDismissesKeyboard(.interactively)
#endif #endif
} }
} }