You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 06:42:39