首页 > 解决方案 > SwiftUI:.fileImporter 修饰符在通过点击文件选择器“外部”关闭时不更新绑定

问题描述

我在 SwiftUI 视图中使用“.fileImporter”修饰符;它工作得很好,除了一个非常烦人的问题,我无法在任何地方找到解决方案。

“选择器”showFileImporter根据文档的要求绑定到状态变量(最初设置为 false),并配置为允许多选,通过在用户点击按钮时“切换”状态变量来呈现。到目前为止,一切都很好:选择器显示,我可以有效地选择文件(并获取相应的 URLs 集合onCompletion),这反过来又关闭了选择器视图并将绑定的状态变量设置showFileImporterfalse,正如它应该的那样。此外,如果在呈现选择器后,用户点击视图 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 */
        })
        
    }
}

非常感谢任何指针、提示或帮助,因此在此先感谢。

标签: iosswiftswiftui

解决方案


这是一个经过认证的错误(由 Apple 确认)。希望能尽快解决。


推荐阅读