Ios SwiftUI:.fileImporter修饰符在点击“取消绑定”时不更新绑定;“外部”;文件选择器
我在SwiftUI视图中使用“.fileImporter”修饰符;它工作得很好,除了一个非常恼人的问题,我还没有找到任何地方的解决方案 “选择器”根据文档要求绑定到状态变量Ios SwiftUI:.fileImporter修饰符在点击“取消绑定”时不更新绑定;“外部”;文件选择器,ios,swift,swiftui,Ios,Swift,Swiftui,我在SwiftUI视图中使用“.fileImporter”修饰符;它工作得很好,除了一个非常恼人的问题,我还没有找到任何地方的解决方案 “选择器”根据文档要求绑定到状态变量showFileImporter(最初设置为false),并配置为允许多个选择,当用户点击按钮时通过“切换”状态变量来显示。到目前为止,一切都很好:选择器显示,我可以有效地拾取文件(并获取相应的URL集合onCompletion),这反过来会取消选择器视图,并将绑定状态变量showFileImporter设置回false,这是
showFileImporter
(最初设置为false),并配置为允许多个选择,当用户点击按钮时通过“切换”状态变量来显示。到目前为止,一切都很好:选择器显示,我可以有效地拾取文件(并获取相应的URL集合onCompletion
),这反过来会取消选择器视图,并将绑定状态变量showFileImporter
设置回false
,这是应该的。
此外,如果在显示选择器后,用户点击视图UI上的“取消”按钮,选择器将被适当地解除,绑定变量将再次设置为false
,这是应该的
当您通过点击选择器视图外部来关闭选择器时,问题就会出现。
选取器会被解除,好吧,但是绑定变量不会被更新-因此,在我的例子中,用户必须点击“选取文件”按钮两次,以使选取器预设自身,显然,当以这种方式解除时,showFileImporter
状态变量的值不会更新,点击按钮触发的切换操作将首先将其设置为false
,然后在第二次点击时将其设置为true
,然后触发选择器显示
有人知道这是不是一个bug吗?我是做错了什么,还是错过了什么?为了完整起见,我提供了一个示例代码,展示了这种行为:
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 */
})
}
}
非常感谢您的任何指点、提示或帮助,请提前感谢。这是一个经过认证的错误(已由苹果确认)。希望很快就能解决。这似乎是个bug。你应该向苹果公司提交一份报告。我也是这么想的。我已经提交了一份报告,但我的希望并没有那么高。。。谢谢你的评论。