Отформатируйте текстовое поле до 2 десятичных знаков без ввода десятичного знака (SwiftUI) - PullRequest
0 голосов
/ 29 октября 2019

Мне бы хотелось, чтобы в текстовом поле, когда пользователь вводит число, например 12345, оно форматируется как 123.45. Пользователю никогда не нужно вводить десятичную точку, он просто использует 2 самых правых числа в качестве десятичных разрядов. Поле также должно содержать только цифры. Это для проекта SwiftUI. Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 29 октября 2019

Поскольку существует двусторонняя привязка между тем, что вы вводите, и тем, что отображается в представлении TextField, кажется, что невозможно интерполировать введенное отображаемое число. Я бы предложил небольшой взлом:

  • создать ZStack с наложенным TextField и Text View.
  • шрифт переднего плана для введенного текста в TextField - чистый или белый .foregroundColor(.clear)
  • клавиатура - это только число без десятичной точки: .keyboardType(.numberPad)
  • использование .accentColor(.clear) чтобы скрыть курсор
  • результаты отображаются в текстовом представлении с форматированием specifier: "%.2f"

Это будет выглядеть как

image

Это код:

struct ContentView: View {
    @State private var enteredNumber = ""
    var enteredNumberFormatted: Double {
        return (Double(enteredNumber) ?? 0) / 100
    }
    var body: some View {

        Form {
            Section {
                ZStack(alignment: .leading) {
                    TextField("", text: $enteredNumber)
                        .keyboardType(.numberPad).foregroundColor(.clear)
                        .textFieldStyle(PlainTextFieldStyle())
                        .disableAutocorrection(true)
                        .accentColor(.clear)
                    Text("\(enteredNumberFormatted, specifier: "%.2f")")
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...