忽略 TextField SwiftUI Combine 中输入的左侧空格

Ignore left whitespaces on imput in TextField SwiftUI Combine

我正在传递给 TextField 发布的变量

TextField("First name", text: $state.firstName)

我想控制输入:忽略空格,如果它是从左边输入的

在哪里以及如何做?

可以使用代理绑定,如下所示

TextField("First name", text: Binding(
    get: { self.state.firstName },
    set: {
        var newValue = [=10=]
        // fix newValue here as needed
        self.state.firstName = newValue
}))

在您的 ViewModel 中添加一个检查器,它会自动检查每个击键并修复第一个索引处的白色 space。

import Foundation
import Combine

class ViewModel: ObservableObject {
    @Published var value: String = ""
    var previousAmount = 0.0
    var validStringChecker: AnyCancellable? = nil

    init() {
        validStringChecker = $value.sink { val in
            if val.first == " " {
                var newValue = val
                newValue.remove(at: newValue.firstIndex(of: " ")!)

                DispatchQueue.main.async {
                    self.value = newValue
                }
            }
        }
    }
}

在你的 ContentView 中使用你的 TextField 比如:

import SwiftUI
import Foundation
import Combine


struct ContentView: View {
    @ObservedObject var viewModel = ViewModel()

    var body: some View {
        VStack {
            TextField("First Name", text: $viewModel.value)
                .textFieldStyle(RoundedBorderTextFieldStyle()).padding()
        }
    }
}