在 SwiftUI 中切换导航栏上的按钮并改变外观

Toggle a button on Navigation Bar in SwiftUI & have it change appearance

使用 SwiftUI,我希望能够根据一些 Bool 值更改 NavigationView 上的按钮,指示它是否应该 On关闭.

这类似于使用 UIKit 替换屏幕两侧的条形按钮项以在单击时显示不同的按钮和相关操作。

我可以用下面的代码让它工作,但我不确定这是否是完成它的最佳方法,所以我愿意改进。

import SwiftUI

struct HomeList: View {
    @State var isOn = true

    var body: some View {
        NavigationView {
            List(1 ..< 4) { index in
                Text("Row \(index)")
            }
            .navigationBarTitle(Text(verbatim: "Title"), displayMode: .inline)
            .navigationBarItems(trailing:
                Button(action: {
                    self.isOn = !self.isOn
                }, label: {
                    Text(self.isOn ? "On" : "Off")
                })
            )
        }
    }
}

关键部分是:

  • 在我的 isOn 变量上使用 @State modifier,它告诉我的界面在更改时失效并重新呈现
  • 让我的 Button 动作修改 isOn &如果我需要它也可以支持其他动作
  • 我的 Button 标签中的三元运算符会更新 Text(如果需要,也可以是 Image)以反映正确的外观

最后,它在实际中的表现: