Swift - 解雇后的popViewController

Posted

技术标签:

【中文标题】Swift - 解雇后的popViewController【英文标题】:Swift - popViewController after Dismiss 【发布时间】:2020-04-13 15:39:03 【问题描述】:

我正在尝试关闭显示为 modal("Present Modally") 的 viewcontroller,然后关闭 navigationController 中的 popViewController。这是我的故事板,我想从 QRScanner VC 转到 Monitoring VC。

这是我在添加设备 VC 中展示 QRScanner VC 的方式:

let storyboard = UIStoryboard(name: StoryboardIDs.MainStoryboard, bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: VCIDs.QRDeviceScannerVC) as! QRDeviceScannerVC
controller.deviceName = deviceNameTxt.text
present(controller, animated: false, completion: nil)

这是我尝试返回 MonitoringVC 的方式:

self?.navigationController?.popViewController(animated:true)?.navigationController?.popViewController(animated: false)

也试过了:

self?.dismiss(animated: true, completion: 
    self?.presentingVC?.navigationController?.popViewController(animated: false)
)

它总是转到添加设备 VC 而不是监控 VC

【问题讨论】:

您的情节提要似乎有错误?从监控到添加设备似乎有两个推送序列。 有2个按钮可以打开添加设备。当用户已经注册了至少 1 个设备时,其中 1 个被隐藏。 【参考方案1】:

使用 unwind segue,其中 unwind 目标方法位于 Monitoring VC 中。所有正确的事情都会像魔术一样发生。

【讨论】:

【参考方案2】:

你可以试试

self?.dismiss(animated: false, completion:nil)
self?.presentingVC?.navigationController?.popViewController(animated: true)

只需检查您是否引用了导航控制器

【讨论】:

由于某种原因 navigationController 为 nil :/ 和presentingVC是AddDevice还是模态?另外,你是推送 AddDevice 还是展示了? 看起来let presentingVC = self.presentingViewController 正在返回UITabBarController。我用present 来展示 QRScannerVC 这个自我是什么?您可以直接尝试使用 self 而不是 self.presentingViewController self 返回 QRDeviceScannerVC 并且 'self.navigationController` 也返回 nil :/

以上是关于Swift - 解雇后的popViewController的主要内容,如果未能解决你的问题,请参考以下文章

swift 键盘解雇

Swift:在解雇的完成处理程序中呈现 VC

iOS Swift:如何创建像 UIAlertView 这样看似在解雇后自行消失的对象

键盘解雇的 resignFirstResponder 与 endEditing

如果用户解雇或忽略第一个通知,如何重复本地通知?

在呈现新视图控制器后关闭当前视图控制器 - swift