【发布时间】:2021-02-10 10:46:52
【问题描述】:
我正在尝试根据在 NavigationBar 菜单中选择的选项显示不同的视图。我被困在最好的方法上。 首先,根据我目前的做法(我认为这不对!),当我按下菜单项时,我在 Xcode 调试器中收到一条消息:
SideMenu[16587:1131441] [UILog] 调用 -[UIContextMenuInteraction updateVisibleMenuWithBlock:] 而没有可见的上下文菜单。这 不会做任何事情。
我该如何解决这个问题?
其次,当我从菜单中选择一个选项时,如何重置 bool 以便它不会被执行,除非再次从菜单中选择它。尝试在 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)
}
}
这是我选择每个菜单项时得到的结果。我希望能够只显示一个菜单项。 Essentially dismiss the other one when a new menu item is selected
【问题讨论】:
-
您编写了导航,但在您的代码中只是显示/隐藏子视图,那么您真正打算做什么?
-
我想显示选定的视图。例如,如果我从菜单中选择“新建”,我想切换到“新建视图”
-
更新主题为“显示不同的视图”