我有一个带有两个按钮的视图控制器:
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/