iOS:通过委托方法从推送的 ViewController 返回?

Posted

技术标签:

【中文标题】iOS:通过委托方法从推送的 ViewController 返回?【英文标题】:iOS: return from pushed ViewController via delegate methods? 【发布时间】:2012-03-29 01:58:52 【问题描述】:

我已经为此苦苦挣扎了将近 2 个小时,但没有运气。

我有一个视图控制器。让我们先调用它。我按下一个按钮,它使用模态样式将我带到第二个视图控制器。其次,我添加了一些可以通过两个导航栏按钮保存或丢弃的数据:保存和取消。两者都做他们所做的,然后他们让我回到上一个屏幕。我实现了一个协议并使用了委托。到目前为止一切正常。

今天我决定有一个可以从第二个 VC 访问的第三个视图控制器。问题是在我将转换从 First 到 Second 更改为 PUSH(而不是模态)之前,我无法移动到 THIRD。现在我可以从第一到第二,从第二到第三。一切都很好。

问题:如果我在第二个 VC 上按取消或保存,它会调用方法,它使用委托转到 FIRST 并执行某些函数,但是当它调用时:

[self dismissViewControllerAnimated:YES completion:nil];

什么也没发生,我停留在第二个视图上。基本上我使用的是带有委托和协议方法的 MODAL ......我切换到 PUSH,我无法摆脱我的第二个视图并返回到第一个。似乎dismissViewController 没有做任何事情。

非常感谢任何帮助。我可以通过删除取消按钮并使用默认情况下与 PUSH 一起提供的 BACK 来解决所有这些问题,但我只想知道它有什么问题..谢谢!!

【问题讨论】:

在将 viewControllers 推送到导航堆栈时使用 popViewController:animated。 dismissViewController:animated 仅适用于 modalViews。 谢谢@HubertKunnemeyer!这是正确的解决方案,并且有效! 【参考方案1】:

在您的第二个 viewContrller 调用 UINavigationController 的方法 popViewControllerAnimated:popToRootViewControllerAnimated:。这会将控制器(第一个调用,即第二个)从导航堆栈中弹出。您可以通过其属性navigationControllerUIViewController 中获取导航控制器。

【讨论】:

完美运行!非常感谢 !但只是为了记录。为什么另一种方法不起作用? Nvm Hubert 在上面解释过。关闭仅适用于模态视图!

以上是关于iOS:通过委托方法从推送的 ViewController 返回?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13-VNDocumentCameraViewController的最大扫描次数

Firebase 通知在 iOS 10 上触发错误的委托

应用程序尚未启动时的 Apple 推送通知委托方法

应用在前台运行时收到 iOS 推送通知

IOS 7 通过单击推送通知查看特定视图控制器

iOS Swift 从推送通知以编程方式导航到某些 ViewController