我正在尝试在我的应用程序中设置 a DocumentGroup,但还没有ReferenceFileDocument可用的示例。我知道 aFileDocument是什么,但ReferenceFileDocuments 有什么不同。
在文档中它说的是:
与 ReferenceFileDocument 的一致性预计是线程安全的,并且反序列化和序列化将在后台线程上完成。
如果用户使用 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 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) 我的基于文档的应用程序支持多种不同的文件类型。它目前是用 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
我的问题是关于 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)
第一个问题:一旦文档“打开”,即当代码在 的范围内运行时,如何编辑/更改实际文件名 ContentView?SwiftUI 文档的缺乏使得寻找此类问题的答案变得非常困难 - 我想我已经搜索了整个互联网,但似乎没有人遇到此类问题,即使他们遇到了,他们发布的问题也没有答案- 我自己就其他问题提出了几个问题,甚至没有得到任何评论,更不用说答案了。
我还有另一个问题,我认为有些相关:例如,我在“文件”应用程序中看到,某些文件类型在选择时可以在该文件的“信息”窗格下显示其他扩展信息(例如:视频文件显示像素尺寸、持续时间和编解码器信息);我的应用程序的文档包含几个值(在保存的数据内),我希望用户能够在文档选择器中“浏览”这些值,而无需打开文件本身,其方式与文件应用程序中所述的类似。
我的第二个问题是:这可能吗?如果可以,我至少可以从哪里开始寻找答案?我的猜测是,这对于 SwiftUI 目前来说是“不可能”的,所以它必须与“常规”Swift 集成?
预先感谢您的任何指导。
我正在开发一个 SwiftUI iOS 应用程序,最初是从 A WindowGroup 开始的。在另一个视图中,我决定需要将该视图呈现为 DocumentGroup 场景,以利用它附带的所有功能。我不希望应用程序的入口点是 DocumentGroup 场景。我只是希望我的应用程序的入口点是 WindowGroup 场景,然后在 WindowGroup 场景的另一个视图中,我想调用 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 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)