【问题标题】:Missing last character with SwiftUI TextifeldSwiftUI 文本字段缺少最后一个字符
【发布时间】:2021-10-18 05:53:01
【问题描述】:

我在 SwiftUI 中使用 TextField() 时遇到了一个非常尴尬的问题。我要做的就是将数据从文本字段传递给一个类(用@ObservableObject 标记)。在这个类中,有一个名为 displayData() 的函数,它只打印出文本字段传递的数据。我会说 70% 的时间,字符串的最后一个字符丢失了。让我感到困扰的是它并非一直都在发生。这让我很难弄清楚。

举个例子,如果我在第一个 TextField() 中输入 1234,print(self.username) 将返回 123。当我尝试添加第二个 4 时,它会打印出 12344。

TextField() 和 SecureField() 都有这个问题。

这就是 ContentView 中发生的事情

            TextField("Enter your username here.", text: self.$dataManager.username)
                .padding()
            SecureField("Enter your password here.", text: self.$dataManager.password)
                .padding()
            Spacer()
            Button(action: {
                self.dataManager.displayData()
            }, label: {
                Text("Send Data")
            }).padding()
            Spacer()

在课堂上:

var username: String = ""
var password: String = ""

func displayData(){
        print("USERNAME: \(self.username), PASSWORD: \(self.password)")
    }

非常感谢!

【问题讨论】:

  • 这个视图是创建 dataManager 实例还是在其他地方创建的?

标签: swift swiftui


【解决方案1】:

为了让您的usernamepassword 属性正确绑定到您的字段,您需要在ObservableObject 中使用@Published 注释它们。

以下版本可以正常工作,不会遇到您提到的问题:

class ViewModel : ObservableObject {
    @Published var username = ""
    @Published var password = ""
    
    func displayData(){
        print("USERNAME: \(self.username), PASSWORD: \(self.password)")
    }
}

struct ContentView : View {
    @StateObject var dataManager = ViewModel()
    
    var body: some View {
        TextField("Enter your username here.", text: self.$dataManager.username)
            .padding()
        SecureField("Enter your password here.", text: self.$dataManager.password)
            .padding()
        Spacer()
        Button(action: {
            self.dataManager.displayData()
        }, label: {
            Text("Send Data")
        }).padding()
        Spacer()
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 2022-10-22
    • 2019-12-23
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    相关资源
    最近更新 更多