如何解决在MacOs的SwiftUI中打开FileDialog
在MacOS上的SwiftUI应用中,我希望允许用户从MacOS文件系统中选择文件。
我尝试使用AppKits NSOpenPanel
。
我曾这样尝试过,但无法创建NSViewControllerRepresentable。
struct ContentView: View {
@State var filename = "Filename"
@State var showFileChooser = false
var body: some View {
HStack {
Text(filename)
Button("select File")
{ self.showFileChooser = true
}.sheet(isPresented: $showFileChooser)
{ FileChooser()
}
}
.frame(maxWidth: .infinity,maxHeight: .infinity)
}
}
struct FileChooser : {
func makeNSViewController(context: Context) -> NSOpenPanel {
NSOpenPanel()
}
func updateNSViewControler(_ nsView: NSOpenPanel,context: Context) {
}
}
这是正确的方法吗?
怎么了?
解决方法
实际上您不需要,因为NSOpenPanel
是一个窗口,而不是视图控制器。
这是可行的方法。使用Xcode 11.7 / macOS 10.15.6进行了测试
struct ContentView: View {
@State var filename = "Filename"
@State var showFileChooser = false
var body: some View {
HStack {
Text(filename)
Button("select File")
{
let panel = NSOpenPanel()
panel.allowsMultipleSelection = false
panel.canChooseDirectories = false
if panel.runModal() == .OK {
self.filename = panel.url?.lastPathComponent ?? "<none>"
}
}
}
.frame(maxWidth: .infinity,maxHeight: .infinity)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。