ios - SwiftUI:.fileImporter 修饰符在通过点击文件选择器“外部”关闭时不更新绑定
问题描述
我在 SwiftUI 视图中使用“.fileImporter”修饰符;它工作得很好,除了一个非常烦人的问题,我无法在任何地方找到解决方案。
“选择器”showFileImporter
根据文档的要求绑定到状态变量(最初设置为 false),并配置为允许多选,通过在用户点击按钮时“切换”状态变量来呈现。到目前为止,一切都很好:选择器显示,我可以有效地选择文件(并获取相应的 URLs 集合onCompletion
),这反过来又关闭了选择器视图并将绑定的状态变量设置showFileImporter
回false
,正如它应该的那样。此外,如果在呈现选择器后,用户点击视图 UI 上的取消按钮,选择器将被适当地关闭,并且绑定变量false
再次设置为 - 应该如此。
当您通过在选择器视图之外点击来关闭选择器时,就会出现问题。
选择器被解雇了,好吧,但是绑定的变量没有得到更新 - 因此,在我的情况下,用户必须点击“选择文件”按钮两次才能让选择器预设自己,显然是因为当以这种方式解雇时状态变量的值showFileImporter
不会更新,并且通过点击按钮触发的切换操作会将其设置为false
“第一次”,然后true
在第二次点击时将其设置为,然后触发选择器演示。
任何人都知道这是否是一个错误?我是在做一些天生错误的事情,还是错过了什么?只是为了完成,我包括一个展示这种行为的示例代码:
struct ContentView: View {
@State private var showFileImporter: Bool = false
var body: some View {
VStack {
Button("Pick Some Files...") {
showFileImporter.toggle()
}
}
.fileImporter(
isPresented: $showFileImporter,
allowedContentTypes: [.video, .audio, .image],
allowsMultipleSelection: true,
onCompletion: { result in
/* ...some code here */
})
}
}
非常感谢任何指针、提示或帮助,因此在此先感谢。
解决方案
这是一个经过认证的错误(由 Apple 确认)。希望能尽快解决。