我有一个带有两个按钮的视图控制器:
Button1调出documentPickerViewController并允许用户选择一个文件。
Button2转到第二个视图控制器。

在下面的代码中,Button1链接到“ openFile”。
Button2将segue调用到第二个视图控制器。

所以这就是我遇到的问题:
单击Button1,将显示文档选择器。
如果我选择一个文档,则文档选择器会消失,然后返回查看控制器。
到目前为止,一切都很好。

现在,我按下Button2。第二个视图控制器出现。都好。我退出并回到第一视图控制器。

现在,我再次按下Button1。显示文档选择器。
但是这次我单击“取消”。文档选择器消失,但出现第二个视图控制器!

我懂了
“对的开始/结束外观转换的不平衡调用。”和
“ [DocumentManager]视图服务确实终止并出现错误:错误域= _UIViewServiceErrorDomain代码= 1”(空)“ UserInfo = {Terminated = disconnect方法}”

通过研究,我知道我必须在堆栈中弹出一个额外的第二视图控制器,但是我看不到应该在哪里完成以及在哪里合适的弹出位置?

我尝试设置“动画:假”,这没有任何区别。

提前致谢。

@IBAction func openFile(_ sender: Any) {

    let documentPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(documentTypes: ["public.text"], in: UIDocumentPickerMode.import)
    documentPicker.delegate = self
    documentPicker.modalPresentationStyle = UIModalPresentationStyle.fullScreen
    self.present(documentPicker, animated: true, completion: nil)

}


func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {

    self.dismiss(animated: true, completion: nil)

}

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
    if controller.documentPickerMode == UIDocumentPickerMode.import {
        var textRead = ""
        do {
            if urls.count > 0 {
                for i in 0...urls.count-1 {
                    textRead = try String(contentsOf: urls[i], encoding: .utf8)
                    textView.text = textView.text + textRead
                }
            }
        }
        catch {
            /* error handling here */
            print("There's a problem reading the file")
        }

    }

}

最佳答案

我不确定在实现documentPickerWasCancelled(_:)时要做什么,但是知道,如果您只想隐藏文档选择器,则无需显式调用self.dismiss(animated: true, completion: nil):当您点击“取消”文档时选择器已经解散了。

关于ios - 在哪里使用popToRootViewController将额外的VC弹出堆栈?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48896648/

10-12 15:16