如何在用于在Swift5上选择文件的屏幕上创建取消按钮?

问题描述 投票:0回答:1

我正在使用UIDocumentBrowser检索文件。但是我无法在导航栏中放置后退或取消按钮。

我想为此设置一个取消按钮,但是我不能设置一个取消按钮。我该如何解决这个问题?

当前代码

import Foundation
import UIKit

@available(iOS 11.0, *)
class DocumentBrowserViewController : UIDocumentBrowserViewController, UIDocumentBrowserViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

         delegate = self

         browserUserInterfaceStyle = .dark
         view.tintColor = .white
    }

    func documentBrowser(_ controller: UIDocumentBrowserViewController, didRequestDocumentCreationWithHandler importHandler: @escaping (URL?, UIDocumentBrowserViewController.ImportMode) -> Void) {
        let newDocumentURL: URL? = nil

        // Set the URL for the new document here. Optionally, you can present a template chooser before calling the importHandler.
        // Make sure the importHandler is always called, even if the user cancels the creation request.
        if newDocumentURL != nil {
            importHandler(newDocumentURL, .move)
        } else {
            importHandler(nil, .none)
        }
    }

    func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL]) {
        guard let sourceURL = documentURLs.first else { return }

        do{
           try presentDocument(at: sourceURL)
        } catch {
            Log.Debug("\(error)")
        }
    }

    func documentBrowser(_ controller: UIDocumentBrowserViewController, didImportDocumentAt sourceURL: URL, toDestinationURL destinationURL: URL) {
        // Present the Document View Controller for the new newly created document
        do{
            try presentDocument(at: sourceURL)
        } catch {
            Log.Debug("\(error)")
        }
    }

    func documentBrowser(_ controller: UIDocumentBrowserViewController, failedToImportDocumentAt documentURL: URL, error: Error?) {
        // Make sure to handle the failed import appropriately, e.g., by presenting an error message to the user.
    }

    func presentDocument(at documentURL: URL) throws {
        guard documentURL.startAccessingSecurityScopedResource() else {
            throw IXError.fileAcessFailed
        }

        let storyBoard = UIStoryboard(name: "Main", bundle: nil)
        let documentViewController = storyBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController

        documentViewController.document = Document(fileURL: documentURL)
    }
}

ios swift file document
1个回答
0
投票

我是否正确理解您要在导航堆栈上推送viewController(documentViewController),并在navigationBar上具有后退按钮,以便将您带回到主viewController(DocumentBrowserViewController)?如果是这样,则首先需要将documentViewController推送到当前导航堆栈上。

首先,是否出现documentViewController?

我看到的是您实例化documentViewController,将其文档设置为Document(...)并结束故事。我不使用情节提要,但是实例化呈现了viewController吗?

如果您提供更多详细信息,我将更新答案。但是一般的结论是在您的presentDocument(...)中,您需要:

self.navigationController?.pushViewController(documentViewController, animated: true)
© www.soinside.com 2019 - 2024. All rights reserved.