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

Posted

技术标签:

【中文标题】忽略 TextField SwiftUI Combine 中输入的左侧空格【英文标题】:Ignore left whitespaces on imput in TextField SwiftUI Combine 【发布时间】:2020-05-07 09:01:54 【问题描述】:

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

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

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

我可以在哪里以及如何做?

【问题讨论】:

【参考方案1】:

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

TextField("First name", text: Binding(
    get:  self.state.firstName ,
    set: 
        var newValue = $0
        // fix newValue here as needed
        self.state.firstName = newValue
))

【讨论】:

【参考方案2】:

在您的ViewModel 中添加一个检查器,该检查器将自动检查每个击键并修复第一个索引处的空白。

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 SwiftUI Combine 中输入的左侧空格的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:TextField 内的填充

使用 SwiftUI 中活动 TextField 中的值更新非活动 TextField

UIPickerView 作为 SwiftUI 中 TextField() 的输入

如何防止 TextField 在 SwiftUI 列表中消失?

如何检测何时点击 TextField? (MacOS 上的 SwiftUI)

SwiftUI:提交后留在同一个 TextField 上?