【问题标题】:How do I update a text label in SwiftUI?如何在 SwiftUI 中更新文本标签?
【发布时间】:2020-03-18 16:50:10
【问题描述】:

我有一个 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

我该怎么做?

【问题讨论】:

  • 请不要加回xcode标签,因为它与您的问题无关。该标签仅应用于专门针对 Xcode IDE 的问题。您的问题纯粹是关于 Swift 和 SwiftUI。
  • 好的!谢谢!我不知道!

标签: ios swift swiftui


【解决方案1】:

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

第一种方法是将字符串放入@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()
    }
}

如果您的字符串存储在视图外部的类中,您可以使用在您的类上实现ObservableObject 协议并将字符串变量设为@Published,以便对其进行任何更改都会导致视图更新.在视图中,您需要将您的类变量设置为 @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())
    }
}

【讨论】:

  • 我对@State 变量一无所知,这就是问题所在。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-10-23
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 2016-12-19
  • 2021-04-05
相关资源
最近更新 更多