如何在 SwiftUI 中单击时隐藏按钮

How to hide Button on Click in SwiftUI

我想在单击一个按钮后隐藏它并显示另一个按钮,反之亦然。

默认情况下,锁定按钮应该是第一个显示的按钮。点击后,只有第二个解锁按钮显示在相同位置。

                  Button { //lock button
                    app.statusBar?.stop()
                   
                } label: {
                    Image(systemName: "lock")
                }
                                  
                    Button { //unlock button
                        app.statusBar?.start()
                       
                    } label: {
                        Image(systemName: "lock.open")
                    }
                }

这是一个 macOS 应用程序。

为什么不直接 一个 按钮?

@State private var isLocked = false

...
    
    Button { //lock button
        isLocked.toggle()
        if isLocked {
            app.statusBar?.stop()
        } else {
            app.statusBar?.start()
        }
    } label: {
        Image(systemName: isLocked ? "lock" :  "lock.open")
    }

如果您真的想要两个按钮,可以使用 opacity 修饰符隐藏一个按钮

Button {

  ... 

}
.opacity(isLocked ? 1.0 : 0.0)

您需要通过 @State 变量设置条件。当变量在 true 和 false 之间切换时,相应的 Button 将相应显示。

这是一个例子:

struct Example: View {
    @State private var free = true

    var body: some View {

            if free {

                Button { //lock button
                    app.statusBar?.stop()
                    free = false                   
                } label: {
                    Image(systemName: "lock")
                }

            } else {
                                  
                 Button { //unlock button
                        app.statusBar?.start()
                        free = true
                 } label: {
                        Image(systemName: "lock.open")
                 }
            }

    }
}