我试图根据导航栏菜单中选择的选项显示不同的视图,但卡在了最佳实现方式上。 首先,基于我的当前做法(我认为它不正确!),当我按下菜单项时,在Xcode调试器中会收到以下信息:
SideMenu[16587:1131441] [UILog] Called -[UIContextMenuInteraction updateVisibleMenuWithBlock:] while no context menu is visible. This won't do anything.
我该如何解决这个问题?
第二,当我从菜单中选择一个选项时,我该如何重置布尔值,以便它不会再次执行,除非再次从菜单中选择。尝试在if
条件内使用self.showNewView = false
进行重置会导致编译器错误。
这是我正在处理的完整可执行样本代码。感谢任何帮助解决此问题。谢谢!
struct ContentView: View {
@State var showNewView = false
@State var showAddView = false
@State var showEditView = false
@State var showDeleteView = false
var body: some View {
NavigationView {
GeometryReader { g in
VStack {
if self.showAddView {
AddView()
}
if self.showNewView {
NewView()
}
if self.showEditView {
EditView()
}
if self.showDeleteView {
DeleteView()
}
}.frame(width: g.size.width, height: g.size.height)
}
.navigationTitle("Title")
.navigationBarItems(leading: {
Menu {
Button(action: {showNewView.toggle()}) {
Label("New", systemImage: "pencil")
}
Button(action: {showEditView.toggle()}) {
Label("Edit", systemImage: "square.and.pencil")
}
} label: {
Image(systemName: "ellipsis.circle")
}
}(), trailing: {
Menu {
Button(action: {showAddView.toggle()}) {
Label("Add", systemImage: "plus")
}
Button(action: {showDeleteView.toggle()}) {
Label("Delete", systemImage: "trash")
}
} label: {
Image(systemName: "plus")
}
}())
}
.navigationBarTitleDisplayMode(.inline)
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct NewView: View {
var body: some View {
GeometryReader { g in
Text("This is New View")
}
.background(Color.red)
}
}
struct EditView: View {
var body: some View {
GeometryReader { g in
Text("This is Edit View")
}
.background(Color.green)
}
}
struct AddView: View {
var body: some View {
GeometryReader { g in
Text("This is Add View")
}
.background(Color.orange)
}
}
struct DeleteView: View {
var body: some View {
GeometryReader { g in
Text("This is Delete View")
}
.background(Color.purple)
}
}
当我选择每个菜单项时,会显示如下内容。我想只显示一个菜单项,也就是在选择新的菜单项时隐藏其他菜单项。