【问题标题】:How to change a @State public var value in swiftUI?如何在 swiftUI 中更改 @State public var 值?
【发布时间】:2023-04-10 16:52:02
【问题描述】:


在 SwiftUI 中,我有

@State public var utilisateur = ""
@State var connected = false


在这里,我有一个 TextField 来设置 utilisateur 的值。

TextField("nom.prenom", text: $utilisateur)


然后,如果utilisateur 不是"",我这样做了:

if self.connected{

                       Text("Connecté en tant que \(utilisateur)")
                   .padding()
                   .background(Color(red:0.3,green:0.8,blue:0.3))
                       .foregroundColor(.white)
                }

if (!(self.utilisateur=="")){

                    Button(action: {self.connected.toggle()}) {
                        self.connected ? Text("Se déconnecter") : Text("Se connecter")
                    //                        .fontWeight(.bold)
                                    }
                                    .padding()
                    .background(self.connected ? Color(.red) : Color(red:0.0,green:0.4,blue:0.7))
                                    .foregroundColor(.white)

                }



我想要的是当用户点击Se déconnecter 时删除utilisateur 值。

我尝试了很多可能性,但没有一种可行......

if !(self.connected){
                    $utilisateur=""
                }
if !(self.connected){
                    utilisateur=""
                }
if !(self.connected){
                    self.utilisateur=""
                }
if !(self.connected){
                    self.$utilisateur=""
                }

有人知道怎么做吗?

【问题讨论】:

  • 请注意:您可以在 Swift 中跳过 if 语句中的括号。你可以写if self.utilisateur != "" {,而不是写if (!(self.utilisateur=="")){。这样,您的代码将更具可读性。
  • !utilisateur.isEmpty 是更好的方法。

标签: swift button uibutton swiftui


【解决方案1】:

您应该使用的正确的是self.utilisateur = "" 将此行添加到您的Button 的操作块中。这是您执行此操作所需的工作代码:

struct CV: View {
    @State private var utilisateur = ""
    @State private var connected   = false
    @State private var buttonTitle = "connect"
    var body: some View {
        VStack {
            TextField("Connect to??", text: $utilisateur)
            if connected {
                Text("Connected to \(utilisateur)")
                    .padding()
                    .background(Color(red:0.3,green:0.8,blue:0.3))
                    .foregroundColor(.white)
            }
            if !utilisateur.isEmpty {
                Button(action: {
                    if self.buttonTitle == "connect" {
                        self.buttonTitle = "disconnect"
                    } else {
                        self.utilisateur = ""
                    }
                    self.connected.toggle()
                }) {
                    Text(buttonTitle)
                        .fontWeight(.bold)
                }
                .padding()
                .background(connected ? Color(.red) : Color(red:0.0,green:0.4,blue:0.7))
                .foregroundColor(.white)
            }
        }
    }
}

【讨论】:

  • 感谢您的回答,但在这种情况下,一旦我点击连接,peudo 将被删除。我想要的是伪只会在“断开连接”点击时被删除
  • 我在代码中只看到一个按钮。您是否忘记添加Disconnect 按钮?还是我错过了什么?还是您说的是具有 2 个不同标题的同一个按钮?
  • 同一个按钮连接和断开连接:self.connected ? Text("be disconnected") : Text("Be connected")
  • 虽然我对你的流程有点困惑,但我已经为你的问题更新了一个明智的解决方案。看看这个。
  • 效果很好!谢谢 :) 我只是在else 中添加self.buttonTitle = "connect" 来重置值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多