如何在 SwiftUI 中更新文本标签?

Sus*_*dan 12 ios swift swiftui

我有一个 SwiftUI 文本标签,我想在按下按钮后在其中写一些东西。

这是我的代码:

Button(action: {
                registerRequest() // here is where the variable message changes its value
            }) {
                Text("SignUp")
            }
            Text(message) // this is the label that I want to change
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Hel*_*lam 22

仅使用您共享的代码很难确切地说出您应该如何做,但这里有一些好方法:

第一种方法是将字符串放在一个@State变量中,这样它就可以被改变,对它的任何更改都会导致视图更新。以下是您可以使用实时预览进行测试的示例:

import SwiftUI

struct UpdateTextView: View {
    @State var textToUpdate = "Update me!"
    var body: some View {
        VStack {
            Button(action: {
                self.textToUpdate = "I've been udpated!"
            }) {
                Text("SignUp")
            }
            Text(textToUpdate)
        }
    }
}

struct UpdateTextView_Previews: PreviewProvider {
    static var previews: some View {
        UpdateTextView()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的字符串存储在视图外部的类中,您可以使用ObservableObject在您的类上实现协议并使字符串变量,@Published以便对它的任何更改都会导致视图更新。在视图中,您需要将类变量设置为 an@ObservedObject以完成全部连接。以下是您可以在实时预览中使用的示例:

import SwiftUI

class ExternalModel: ObservableObject {
    @Published var textToUpdate: String = "Update me!"
    func registerRequest() {
        // other functionality
        textToUpdate = "I've been updated!"
    }
}

struct UpdateTextViewExternal: View {
    @ObservedObject var viewModel: ExternalModel
    var body: some View {
        VStack {
            Button(action: {
                self.viewModel.registerRequest()
            }) {
                Text("SignUp")
            }
            Text(self.viewModel.textToUpdate)
        }
    }
}

struct UpdateTextViewExternal_Previews: PreviewProvider {
    static var previews: some View {
        UpdateTextViewExternal(viewModel: ExternalModel())
    }
}
Run Code Online (Sandbox Code Playgroud)