Swift UI Как создать TextField, который принимает только цифры - PullRequest
2 голосов
/ 06 ноября 2019

Я новичок в swiftUI и iOs, я пытаюсь создать поле ввода, которое будет принимать только цифры

 TextField("Total number of people", text: $numOfPeople)

TextField также допускает буквенные символы, как я могу ограничить ввод пользователем только цифр?

Ответы [ 2 ]

4 голосов
/ 06 ноября 2019

Хотя показ цифровой клавиатуры является хорошим первым шагом, на самом деле это не предотвращает ввод неверных данных:

  1. Пользователь может вставить нечисловой текст в текстовое поле
  2. Пользователи iPad по-прежнему получат полноценную клавиатуру
  3. Любой, у кого подключена клавиатура 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.

2 голосов
/ 06 ноября 2019

Вы можете установить тип клавиатуры на TextField, который будет ограничивать то, что могут печатать люди.

TextField("Total number of people", text: $numOfPeople)
    .keyboardType(.numberPad)

Документацию Apple можно найти здесь , а список всех поддерживаемых типов клавиатуры здесь .

...