Используя iOS13.2, Swift-5.1.2, Xcode-11.2, я пытаюсь сделать следующее:
Я хочу использовать TextField. Пользователь должен иметь возможность только вводить x-количество символов в TextField.
Мой код выглядит следующим образом:
import Combine
import SwiftUI
class Entry: ObservableObject {
@Published var entry = "" {
didSet {
entry = String(entry.prefix(6)) // trying to limit to 6 characters
}
}
}
И в приведенном выше коде уже есть строка исключения,
Я вижу, что didSet{...}
неправильный (так как мы в конечном итоге в бесконечном цикле настройки / didSetting снова и снова) ...
Какой лучший способограничить TextField количеством символов x?
Вот остальная часть кода:
struct NumberView: View {
var body: some View {
Group {
HStack {
Spacer()
NumberIcon(number: 1)
NumberIcon(number: 2)
NumberIcon(number: 3)
NumberIcon(number: 4)
NumberIcon(number: 5)
NumberIcon(number: 6)
Spacer()
}
}
}
}
struct NumberIcon: View {
@ObservedObject private var entry = Entry()
var number: Int = 0
var body: some View {
TextField(" ", text: $entry.entry, onEditingChanged: { editing in
print(editing)
print(self.$entry)
})
.padding()
.foregroundColor(Color.black)
.background(Color.green)
.font(.largeTitle)
.lineLimit(1)
.cornerRadius(16.0)
.clipped()
.keyboardType(.numberPad)
}
}
struct NumberView_Previews: PreviewProvider {
static var previews: some View {
NumberView()
}
}
Я знаю, что существуют возможности оболочки UIKit для использованиястарые добрые shouldChangeCharactersIn
методы делегатов из UITextFieldDelegate - но я хотел бы реализовать ограничение символов исключительно с помощью SwiftUI (без кода UIKit). Как я могу это сделать?