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

Posted

技术标签:

【中文标题】如何在 SwiftUI 中更新文本标签?【英文标题】:How do I update a text label in 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。 好的!谢谢!我不知道! 【参考方案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 变量一无所知,这就是问题所在。谢谢!

以上是关于如何在 SwiftUI 中更新文本标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中显示 HTML 文本

如何在 SwiftUI 中更新变量值?

如何在swiftui中使用选择器更改文本大小

如何在 SwiftUI 中对列表中的值求和?

如何在 Kivy、Python 中更新标签的文本

SwiftUI iOS 14 |在 HStack 中自动展开文本框和内容