Хотя показ цифровой клавиатуры является хорошим первым шагом, на самом деле это не предотвращает ввод неверных данных:
- Пользователь может вставить нечисловой текст в текстовое поле
- Пользователи iPad по-прежнему получат полноценную клавиатуру
- Любой, у кого подключена клавиатура Bluetooth, может напечатать что-нибудь
Что вы действительно хотите сделать, так это санировать ввод, например:
import SwiftUI
import Combine
struct StackOverflowTests: View {
@State private var numOfPeople = "0"
var body: some View {
TextField("Total number of people", text: $numOfPeople)
.keyboardType(.numberPad)
.onReceive(Just(numOfPeople)) { newValue in
let filtered = newValue.filter { "0123456789".contains($0) }
if filtered != newValue {
self.numOfPeople = filtered
}
}
}
}
Всякий раз, когда изменяется numOfPeople
, нечисловые значения отфильтровываются, и отфильтрованное значение сравнивается, чтобы увидеть, нужно ли обновлять numOfPeople
во второй раз, перезаписывая неверный ввод фильтруемым вводом.
Обратите внимание, что издатель Just
требует, чтобы вы import Combine
.