在 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
)以反映正确的外观
最后,它在实际中的表现:
使用 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
)以反映正确的外观
最后,它在实际中的表现: