标签: documentgroup

SwiftUI 中“DocumentGroups”的“FileDocument”和“ReferenceFileDocument”有什么区别?

我正在尝试在我的应用程序中设置 a DocumentGroup,但还没有ReferenceFileDocument可用的示例。我知道 aFileDocument是什么,但ReferenceFileDocuments 有什么不同。

文档中它说的是:

与 ReferenceFileDocument 的一致性预计是线程安全的,并且反序列化和序列化将在后台线程上完成。

swiftui documentgroup

12
推荐指数
2
解决办法
1873
查看次数

如何在不启动文件选择器的情况下制作 SwiftUI DocumentGroup 应用程序?

如果用户使用 Xcode 中的 Document App 模板创建 SwiftUI 应用程序,macOS 会使用新文档启动他们。这很好。我可以使用它在新文档中显示入职 UI。

但是,在 iOS 上运行相同的应用程序时,用户会收到股票文档视图控制器的欢迎,以创建或选择文档。

这没有帮助,因为我没有办法展示入职信息或任何其他自定义信息。

我确实注意到,如果您将 WindowGroup 添加到场景中,应用程序将显示该窗口组。但是我不知道如何让用户进入选择器 UI。

有没有人想出如何在这个基于 DocumentGroup 的应用程序上做一些事情?

这是一个完整的文档应用程序

import SwiftUI
import UniformTypeIdentifiers

@main
struct DocumentTestApp: App {
    var body: some Scene {
        DocumentGroup(newDocument: DocumentTestDocument()) { file in
            ContentView(document: file.$document)
        }
    }
}

struct ContentView: View {
    @Binding var document: DocumentTestDocument

    var body: some View {
        TextEditor(text: $document.text)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(document: .constant(DocumentTestDocument()))
    }
}

extension UTType { …
Run Code Online (Sandbox Code Playgroud)

swiftui ios14 documentgroup

9
推荐指数
1
解决办法
910
查看次数

在 SwiftUI DocumentGroup macOS 中创建并打开新文档

如何在基于 SwiftUI ReferenceFileDocument 的应用程序中打开新文档窗口?

背景

此 macOS 应用程序WindowGroups使用.handleEvents(:). 不幸的是,这会导致文件/新建菜单将这些窗口组的名称包含在“新建...窗口”中(如图所示)。由于未能找到一种方法来覆盖该包装,我尝试仅使用CommandGroup(replacing: .newItem) {}.

然而,我也未能重新制作“创建并打开新文档窗口”命令。我尝试过搜索一些要发布并申请的通知.handleEvents。这只会使现有打开的文档窗口成为关键窗口。如果没有打开的文档,它什么也不做。

不需要的包裹

在此输入图像描述

@main
struct TheApp: App {
    
    @StateObject var root: RootStore
    
    var body: some Scene {
        DocumentGroup { ProjectDocument() } editor: { doc in
            DocumentGroupRoot(...)
        }.commands { Menus(root: root) }
        
        WindowGroup("Preset Color Maps") {
             ... .handlesExternalEvents(matching: ...) /// Allows multiple windows
        }.handlesExternalEvents(matching: ...)
        
        WindowGroup("Tutorial") {
             ...
        }.handlesExternalEvents(matching: ...)
    }
}
Run Code Online (Sandbox Code Playgroud)

卡在“新项目”更换接线上

在此输入图像描述

struct NewCommands: Commands {
    var body: some Commands {
        CommandGroup(replacing: …
Run Code Online (Sandbox Code Playgroud)

macos swiftui documentgroup

8
推荐指数
1
解决办法
1529
查看次数

让用户在使用 SwiftUI 和 DocumentGroup 时选择要创建的文档类型

我的基于文档的应用程序支持多种不同的文件类型。它目前是用 SwiftUI 编写的,使用UIDocumentBrowserViewController. 我正在尝试转换为DocumentGroup不直接使用 UIDocumentBrowserViewController的新 SwiftUI (v2)范例。我需要让用户在点击浏览器中的“创建”按钮时选择要创建的文档类型。使用 DocumentGroup,我看不出这是怎么可能的。创建 DocumentGroup 时,必须在此处指定文档:

var body: some Scene {
    DocumentGroup(newDocument: TextDocument()) { file in
        TextDocumentEditor(document: file.$document)
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 UIKit 时,浏览器调用委托函数didRequestDocumentCreationWithHandler,让应用程序在继续之前注入一些 UI 以选择文档类型。事实上,您可以做的是为文档浏览器提供一个模板文件,用于创建新文档。这在 SwiftUI 2 中可能吗?

ios swift swiftui uidocumentbrowserviewcontroller documentgroup

7
推荐指数
0
解决办法
373
查看次数

iOS/iPadOS 中的 SwiftUI + DocumentGroup:如何重命名当前打开的文档

我的问题是关于 SwiftUI 的 DocumentGroup:在 Xcode 中使用一个简单的、基于模板的项目(使用新的多平台、基于文档的应用程序模板),我可以创建新文档、编辑它们等。此外,在应用程序“外部” ,我可以这样操作文档文件 - 移动它、复制它、重命名它等等。

默认情况下,所有新文档都以“Untitled”名称初始化;在主应用程序入口点,我可以访问文件的 URL:

var body: some Scene {
    DocumentGroup(newDocument: ShowPLAYrDocument()) { file in
        // For example, this gives back the actual doc file URL:
        let theURL = file.fileURL
        ContentView(document: file.$document)
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个问题:一旦文档“打开”,即当代码在 的范围内运行时,如何编辑/更改实际文件名 ContentViewSwiftUI 文档的缺乏使得寻找此类问题的答案变得非常困难 - 我想我已经搜索了整个互联网,但似乎没有人遇到此类问题,即使他们遇到了,他们发布的问题也没有答案- 我自己就其他问题提出了几个问题,甚至没有得到任何评论,更不用说答案了。

我还有另一个问题,我认为有些相关:例如,我在“文件”应用程序中看到,某些文件类型在选择时可以在该文件的“信息”窗格下显示其他扩展信息(例如:视频文件显示像素尺寸、持续时间和编解码器信息);我的应用程序的文档包含几个值(在保存的数据内),我希望用户能够在文档选择器中“浏览”这些值,而无需打开文件本身,其方式与文件应用程序中所述的类似。

我的第二个问题是:这可能吗?如果可以,我至少可以从哪里开始寻找答案?我的猜测是,这对于 SwiftUI 目前来说是“不可能”的,所以它必须与“常规”Swift 集成?

预先感谢您的任何指导。

ios swiftui ipados documentgroup

7
推荐指数
1
解决办法
2019
查看次数

是否可以在 SwiftUI iOS 应用程序中组合 WindowGroup 和 DocumentGroup?

我正在开发一个 SwiftUI iOS 应用程序,最初是从 A WindowGroup 开始的。在另一个视图中,我决定需要将该视图呈现为 DocumentGroup 场景,以利用它附带的所有功能。我不希望应用程序的入口点是 DocumentGroup 场景。我只是希望我的应用程序的入口点是 WindowGroup 场景,然后在 WindowGroup 场景的另一个视图中,我想调用 DocumentGroup 场景来打开,就好像该应用程序是基于文档的应用程序一样。任何帮助都感激不尽。谢谢

ios swift swiftui documentgroup swiftui-windowgroup

5
推荐指数
1
解决办法
828
查看次数

Swift UI 2 DocumentGroup获取导航栏按钮操作

在此输入图像描述

我正在为iOS 14(目前正在开发Beta 版)项目使用新的“ DocumentGroup ”场景,我真的不知道如何检测导航栏中的事件,例如按“<”或返回(参见屏幕) “DocumentGroup”场景的预定义导航栏。对于自定义按钮,这是可能的,并且更改栏的样式(例如灰色)也没什么大不了的。我尝试禁用该按钮,向导航栏添加新按钮等。以下示例是您要在 Xcode 中创建新的基于文档的应用程序时的标准代码:

@main struct DocumentAppApp: App {
@SceneBuilder var body: some Scene {
    
    // Adding of a new document
    DocumentGroup(newDocument: DocumentAppDocuments()) { file in
        ContentView(document: file.$document) // .navigationBarBackButtonHidden(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

}

struct ContentView: View {
@Binding var document: DocumentAppDocuments

var body: some View {
    TextEditor(text: $document.text)
}
Run Code Online (Sandbox Code Playgroud)

}

swiftui ios14 documentgroup

3
推荐指数
1
解决办法
1507
查看次数

如何使用 SwiftUI DocumentGroup 读取大文件而不制作临时副本?

我制作了一个 SwiftUI DocumentApp,它可以读取大型媒体文件,但不需要写入它们。在我的文档中,我只想存储文件的 URL,以便我可以使用例如 AVAudioFile 加载它。我无法弄清楚如何在不创建文件临时副本的情况下执行此操作,正如作者在此处所做的那样,因为无法从 fileWrapper 访问文件 URL

我尝试使用configuration.file.regularFileContents(数据)创建一个管道,但到目前为止我没有成功从该管道读取数据。

  init(configuration: ReadConfiguration) throws {
    let tempURL = makeTemporaryFileURL()
    FileManager.default.createFile(atPath: tempURL.path, contents: configuration.file.regularFileContents, attributes: nil)
    audioFileUrl = tempURL
  }
Run Code Online (Sandbox Code Playgroud)

swiftui documentgroup

2
推荐指数
1
解决办法
1225
查看次数