Swift 5 - 选择文件后未调用 documentPicker
Swift 5 - documentPicker not called after a file was selected
我正在做一个 Swift 5 项目,我需要实现一个文档选择器,用户可以为它 select 处理一个音乐文件。文档选取器显示在界面中,但在 UI 中 selected 文档后未调用 documentPicker 函数。
ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack() {
Button("Select files to sync") {
ImportMenuController().selectFile()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
ImportMenuController.swift 调用者 ContentView.swift:
// ImportMenuController.swift
import Foundation
import UIKit
import UniformTypeIdentifiers
class ImportMenuController: UIViewController {
func selectFile() {
let importMenu = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.mp3], asCopy: true)
importMenu.delegate = self
importMenu.allowsMultipleSelection = true
importMenu.shouldShowFileExtensions = true
DispatchQueue.main.async {
self.getTopMostViewController()?.present(importMenu, animated: true, completion: nil)
}
}
func getTopMostViewController() -> UIViewController? {
var topMostViewController = UIApplication.shared.keyWindow?.rootViewController
while let presentedViewController = topMostViewController?.presentedViewController {
topMostViewController = presentedViewController
}
return topMostViewController
}
}
extension ImportMenuController: UIDocumentPickerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL){
print("documentPicker opened")
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("documentPickerWasCancelled opened")
}
}
我尝试了调用 documentPicker 的不同方式,但不幸的是,我仍然无法到达 documentPicker 或 documentPickerWasCancelled 函数,因此 print
命令从未执行过。最后,我需要检索 selected 文件的 fileUrl 以进一步处理它。我做错了什么?
参考
您需要保留 document-picker
委托(在本例中为 ImportMenuController 的实例)。
这为您解决了这个问题。
let importer = ImportMenuController()
var body: some View {
ZStack() {
Button("Select files to sync") {
importer.selectFile()
}
}
我正在做一个 Swift 5 项目,我需要实现一个文档选择器,用户可以为它 select 处理一个音乐文件。文档选取器显示在界面中,但在 UI 中 selected 文档后未调用 documentPicker 函数。
ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack() {
Button("Select files to sync") {
ImportMenuController().selectFile()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
ImportMenuController.swift 调用者 ContentView.swift:
// ImportMenuController.swift
import Foundation
import UIKit
import UniformTypeIdentifiers
class ImportMenuController: UIViewController {
func selectFile() {
let importMenu = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.mp3], asCopy: true)
importMenu.delegate = self
importMenu.allowsMultipleSelection = true
importMenu.shouldShowFileExtensions = true
DispatchQueue.main.async {
self.getTopMostViewController()?.present(importMenu, animated: true, completion: nil)
}
}
func getTopMostViewController() -> UIViewController? {
var topMostViewController = UIApplication.shared.keyWindow?.rootViewController
while let presentedViewController = topMostViewController?.presentedViewController {
topMostViewController = presentedViewController
}
return topMostViewController
}
}
extension ImportMenuController: UIDocumentPickerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL){
print("documentPicker opened")
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("documentPickerWasCancelled opened")
}
}
我尝试了调用 documentPicker 的不同方式,但不幸的是,我仍然无法到达 documentPicker 或 documentPickerWasCancelled 函数,因此 print
命令从未执行过。最后,我需要检索 selected 文件的 fileUrl 以进一步处理它。我做错了什么?
参考
您需要保留 document-picker
委托(在本例中为 ImportMenuController 的实例)。
这为您解决了这个问题。
let importer = ImportMenuController()
var body: some View {
ZStack() {
Button("Select files to sync") {
importer.selectFile()
}
}