使用默认视图关闭 SwiftUI macOS 侧边栏 NavigationLink 详细视图

问题描述

我创建了一个示例 macOS 10.15 SwiftUI 应用程序,其中显示了有关所选项目的侧边栏和详细信息。根据文档,导航视图在第一个位置需要 List,在我的情况下需要 View,如果列表为空,则为 Text,另一个View未选择任何项目时显示

import SwiftUI

struct ContentView: View {

    @State var selection: String?

    var body: some View {
        NavigationView {
            SidebarView(selection: $selection)
            Text("Empty List")
            defaultview()
        }
    }
}

我的第一种方法是创建一个 @State 变量 selection 来保存当前选择,然后由 List 使用。通常我想在节中使用 ForEach,但为了简单起见,我使用了这种方法

struct SidebarView: View {

    @State var elements = ["A","B","C"]
    @Binding var selection: String?

    var body: some View {
        List(elements,id: \.self,selection: _selection) { element in
            NavigationLink(destination: DetailView(element: element,selection: _selection),tag: element,selection: _selection,label: {
                Text(element)
            })
        }
    }    
}

认视图只是一个基本的 View

struct defaultview: View {

    var body: some View {
        Text("I am the default view")
            .background(Color.orange)
            .frame(maxWidth: .infinity,maxHeight: .infinity)
    }
}

用于测试详细视图中的“清除功能I added a simply按钮”,该视图在选择列表元素时显示

struct DetailView: View {

    let element: String?
    @Binding var selection: String?

    var body: some View {
        HStack {
            vstack {
                Text(element ?? "None selected")
                Button(action: { selection = nil }) {
                    Text("clear")
                }
            }
        }
        .frame(maxWidth: .infinity,maxHeight: .infinity)
    }
}

需要更改什么才能使按钮点击实际上消除 NavigationLink 并再次显示 defaultview

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)