繁体   English   中英

在 SwiftUI 中按下按钮时更改字符串的文本

[英]Changing a string's text when a button is pressed in SwiftUI

我试图弄清楚在 SwiftUI 中按下按钮时如何更改字符串的文本。

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
           let title = Text("Button Not Clicked")
                .font(.title)
                .fontWeight(.heavy)
                .foregroundColor(.red)
                .padding()
                .frame(height: 0.0)
        }
        
        Button(action: {
            title.text = "Button Clicked!"
        }) {
            Text("Click Here")
        }
    }
    
    
}

到目前为止,我尝试使用 'title.text = (string)' 更改字符串,但这不起作用。 有任何想法吗?

您可以将其声明为@State var buttonTitle: String = "Button Not Clicked" on ContentView,而不是在 body 属性中声明字符串。 然后,您只需将buttonTitle = "Button Clicked"放入您的操作闭包中。

import SwiftUI

struct ContentView: View {
    @State var buttonTitle: String = "Button Not Clicked"
    var body: some View {
        VStack {
           Text(buttonTitle)
                .font(.title)
                .fontWeight(.heavy)
                .foregroundColor(.red)
                .padding()
                .frame(height: 0.0)

            Button(action: {
                buttonTitle = "Button Clicked!"
            }) {
                Text("Click Here")
            }
        }
        

    }
    
    
}

UIKit 方法是尝试访问 label 并更改其字符串,但在 SwiftUI 中,您的 body 属性将在每次视图更新时有效地重新计算。

显示多个字符串存储在字典中的附加示例:

struct ContentView: View {
    @State var labels: [String : String] = [
        "header" : "This Is the header!",
        "donger" : "",
        "footer" : "Here's the footer."
        
    ]
    
    var body: some View {
        VStack {
            Text(labels["header"]!)
            Text(labels["donger"]!)
            Text(labels["footer"]!)
            
            Spacer()
            
            Button("Update") {
                updateDonger()
            }
        }
    }
    
    func updateDonger() {
        labels["donger"] = #"╰( ͡° ͜ʖ ͡° )つ──☆*:・゚"#
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM