一个额外的 popViewControllerAnimated:当用户按下返回按钮时?

Posted

技术标签:

【中文标题】一个额外的 popViewControllerAnimated:当用户按下返回按钮时?【英文标题】:An extra popViewControllerAnimated: when the user presses the Back button? 【发布时间】:2012-07-16 14:33:26 【问题描述】:

当用户按下后退按钮从活动 UINavigationController 弹出当前 UIViewController 时,我需要 - 在某种特殊情况下 - 以编程方式从同一导航控制器弹出另一个 UIViewController(新的顶部)。

(不赘述,请相信我,这并没有违反 Apple 的人机界面准则。相反,如果我不弹出额外的 VC 可能会违反准则)。

我能想到的唯一方法是在viewWillDisappear: 中放置一个popViewControllerAnimated:,但不幸的是这不起作用(即使我要弹出的VC 仍然显示为self.navigationController.viewControllers 中的最后一个对象) .我在通话中尝试了“是”和“否”。

我找不到一种方法来检测 VC 何时将在 viewWillDisappear: 之前弹出,因为 UINavigationControllerDelegate 没有检测 VC 何时即将弹出的行为,只有当它即将弹出时被推。

有没有办法做到这一点?

【问题讨论】:

那么,您要做的是在按下后退按钮弹出第二个 VC 以返回第一个 VC 后立即呈现/推送第三个 VC? 没有。我想要的是当用户触摸第三个 VC 中的后退按钮时从第三个 VC 直接弹出到第一个 VC(正如我所说,在这种特殊情况下,这并不违反 Apple 的 HIG)。 【参考方案1】:

ios5 中有一些不错的新方法可用于检测您是否即将被弹出。

请参阅 UIViewController 包含部分。

- (BOOL)isBeingPresented __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
- (BOOL)isBeingDismissed __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
- (BOOL)isMovingToParentViewController __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
- (BOOL)isMovingFromParentViewController __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

【讨论】:

谢谢。不幸的是,这些只是对我没有帮助的同步检测方法。我需要一个在用户触摸后退按钮和当前视图控制器弹出之前异步执行的代码。 您可以在 viewWillDisappear 中查看。我就是这样用的。 正如我所说,我确实尝试过 viewWillDisappear。在 viewWillDisappear 中弹出一个 VC 没有任何作用。 这样不行。您需要在之前的 UIViewController 中添加该检查,或者保留 navigationController 并在 viewWillDisappear 中使用保留的一个。 iOS 已经取消了 navigationController ,所以任何进一步的调用都归为 nil。 Steipete,UINavigationController 没有在 viewWillDisappear 中被取消,只有在 viewDidDisapper 中。但是,此时的 self.navigationController.viewControllers 不包含正在弹出的 VC。

以上是关于一个额外的 popViewControllerAnimated:当用户按下返回按钮时?的主要内容,如果未能解决你的问题,请参考以下文章

一个额外的 BarButtonItem

额外域控制器的额外域控制器的安装

UICollectionView - 删除额外的间距

不能在额外的类中外包 UICollectionViewDatasource

如何为 OSX 菜单额外启用复制和粘贴

额外的滚动条如何删除?