忽略 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()
}
}
}
我正在传递给 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()
}
}
}