SwiftUI实现类Xcode文档型App:全局文件侧边栏问题求助
SwiftUI实现文档型应用全局文件侧边栏的问题
我正在通过重写旧的AppKit编辑器学习SwiftUI,目前碰到一个在AppKit中轻松实现,但在SwiftUI里(因我对其了解有限)似乎难以解决的问题:我需要实现一个文档型应用,具备文档标签页视图和类似Xcode的文件浏览导航侧边栏。
现有最简示例代码
struct ContentView: View { @Binding var document: FileBrowserTest4Document let fileURL: URL? var body: some View { BrowserView(placeholder: fileURL?.absoluteString ?? "no file") } } struct BrowserView: View { let placeholder: String @State private var root = FileItem(url: URL.documentsDirectory.appendingPathComponent("Test")) var body: some View { NavigationSplitView { List([root], children: \.children) { item in Button(action: { print("\(item.url)") }) { Label(item.segment, systemImage: item.isFolder ? "folder" : "document") .labelStyle(.titleAndIcon) } .buttonStyle(.plain) } HStack { Button("Help") { print("Help") } Button("Add…") { print("Add…") } } } detail: { Text(placeholder) } } }
其中FileItem本质是URL的包装类,核心代码如下:
struct FileItem: Identifiable, Hashable { let url: URL // 其他无关实现省略 }
当前问题与疑问
目前已实现标签页文档、侧边栏、侧边栏切换按钮,但浏览器中的文件树绑定到文档实例而非应用全局,不符合需求。我尝试过多种方案(如HStack搭配NavigationStack+TextView)均未成功,网上搜索仅找到基于AppKit组件包装的方案。
我想明确:**用纯SwiftUI能否实现需求?**恳请任何建议、指引或明确的否定答复。
更新251003:明确需求(探索中)
- 双击导航栏中的文件,在标签页中打开(或前置已打开的对应文件)
- 点击导航栏底部的
Add…按钮,在文件树选中的当前目录中新建文件 - 支持文件重命名、删除操作,可通过上下文菜单实现
- 选中标签页时,高亮文件树中对应的条目
- 实际场景中,每个文档会关联
rootDirectory以确定文件树的根目录
另外,我使用TextMate编辑已有20年,可能存在思维定式。
更新251003-2:补充尝试方案
将如下代码作为NavigationSplitView列表的按钮动作可实现第一个需求,但这是否属于退回AppKit?
NSDocumentController.shared.openDocument( withContentsOf: item.url, display: true, completionHandler: {_,_,_ in print("Opened \(item.url)") } )
内容的提问来源于stack exchange,提问作者user1007047
相关产品推荐
相关产品推荐

