mic*_*ica 5 macos swift swiftui
在 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) {
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
怎么了?
Asp*_*eri 13
实际上你不需要,因为它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)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |