Как создать кнопку Отмена на экране, которая выбирает файл на Swift5? - PullRequest
1 голос
/ 16 октября 2019

Я использую 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)
    }
}

изображение кнопки отмены, которую я хочу enter image description here

Помогите мне очень

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Я узнал о классе UIDocumentBrowserViewController и успешно добавил кнопки. Но позиция кнопки не там, где я хочу.

Но это решило мою фундаментальную проблему, поэтому я закончу вопрос.

    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
        allowsDocumentCreation = false
        allowsPickingMultipleItems = false
        browserUserInterfaceStyle = .dark
        view.tintColor = .white
        let cancelbutton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelButton(sender:)))
        additionalTrailingNavigationBarButtonItems = [cancelbutton]
    }

    @objc func cancelButton(sender: UIBarButtonItem) {
        dismiss(animated: true, completion: nil)
    }

enter image description here

0 голосов
/ 16 октября 2019

Правильно ли я понимаю, что вы хотите вставить viewController (documentViewController) в стек навигации и иметь кнопку возврата на панели навигации, которая возвращает вас к основному viewController (DocumentBrowserViewController)? Если это так, сначала вам нужно вставить documentViewController в текущий стек навигации.

Прежде всего, появляется ли documentViewController?

Я вижу, что вы создаете экземпляр documentViewController, устанавливаете его документ в Document(...) и конец истории. Я не использую раскадровку, но создает ли экземпляр представление viewController?

Если вы предоставите более подробную информацию, я обновлю ответ. Но общий вывод есть в вашем настоящем документе (...), вам нужно:

self.navigationController?.pushViewController(documentViewController, animated: true)
...