我有一个List包含NavigationLink在NavigationView. 我知道想用ContextMenu包含一个元素的来扩展视图,该元素在我的导航堆栈中显示另一个视图。
struct MainView: View {
@State var elements = ["Hello", "World"]
var body: some View {
NavigationView {
List(elements, id: \.self, rowContent: { element in
NavigationLink(destination: PresentView(element: element)) {
Text(element)
.contextMenu {
NavigationLink(
"Edit",
destination: EditView(element: element)
)
}
}
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
正常点击我的项目的导航工作正常。然而,上下文菜单在 Xcode 11 Beta 5 中停止工作。我收到以下错误:`[WindowServer] display_timer_callback:意外状态。
如何从上下文菜单中将新视图推送到我的导航堆栈上?
一种方法是使用NavigationLink(destination: Destination, isActive: Binding<Bool>, @ViewBuilder label: () -> Label),将标签作为EmptyView隐藏在 a 内ZStack。然后,您可以选择要导航到的元素并切换contextMenu. 这是一个完整的示例:
struct PresentView: View {
let element: String
var body: some View {
Text(element)
}
}
struct EditView: View {
let element: String
var body: some View {
Text("EditView for \(element)")
}
}
struct MainView: View {
@State var elements = ["Hello", "World"]
@State var elementToEdit: String?
@State var isPresentedEditView = false
var body: some View {
NavigationView {
ZStack {
NavigationLink(
destination: elementToEdit == nil ? AnyView(EmptyView()) : AnyView(EditView(element: elementToEdit!)),
isActive: $isPresentedEditView) {
EmptyView()
}
List(elements, id: \.self) { element in
NavigationLink(destination: PresentView(element: element)) {
Text(element)
.contextMenu {
Button("Edit") {
elementToEdit = element
isPresentedEditView.toggle()
}
}
}
}
}
}
}
}
struct ContentView: View {
var body: some View {
MainView()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |