ios – 如何检测是否从导航控制器弹出视图控制器?

前端之家收集整理的这篇文章主要介绍了ios – 如何检测是否从导航控制器弹出视图控制器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我的导航控制器弹出顶视图控制器时,我需要实现一些代码.有没有办法检测视图控制器何时被弹出导航控制器堆栈?

尽可能地,我想远离使用viewWillDisappear或viewDidDisappear,因为我在我的项目中使用一个splitview,并且在主视图中选择一个不同的行也将触发viewWillDisappear / viewDidDisappear方法.

解决方法

更新20150430

根据phatmann的反馈(下面的第一个评论),如果一年以前我回答了这个问题,有什么改变,我很好奇.我把一个简单的例子应用程序放在一起,并且有一些有趣的结果.

选项1,示例

https://github.com/greymouser/TestNVC

我没有能力轻松测试8.x之前的版本,所以我不知道自那以后有什么变化.然而,我最初描述的行为仍然发生.但是,由于把测试应用程序放在一起,我没有注意到我以前没有这样的奇怪.

如果我只是依赖{will,did} MoveToParentViewController,我注意到一个虚假的didMoveToParentViewController:在rootVC上推送第一个非rootVC时,调用parent!= nil(意味着它被添加,不被删除).我在原始答案的时候没有遇到这个问题,因为我通常在我的NVC上有“永久”rootVC,并没有在那里实现回调.请参阅示例应用程序,日志记录设置为LOG_WILL_DID_MTPVC(在ViewController.m中).这是一个编辑的空间 – 我看到的快照:

TestNVC[] -[vc(rootVC) willMoveToParentViewController [entering]
TestNVC[] -[vc(rootVC) didMoveToParentViewController [entering]
TestNVC[] -[vc(1) willMoveToParentViewController [entering]
TestNVC[] -[vc(rootVC) didMoveToParentViewController [entering]  # <-- this is odd
TestNVC[] -[vc(1) didMoveToParentViewController [entering]
...

我原来的答案建议使用{will,did} MoveToParentViewController单独,因为它是一个“一站式”来处理这种行为.然而,现在我看到对rootVC的虚假调用,我建议混合使用{will,done} MoveToParentViewController以及标准的UINavigationControllerDelegate回调.对于示例应用程序中的此行为,请将日志记录设置为LOG_WILL_DID_MTPVC_LEAVING_AND_NVC_WILL_DID_SHOW_VC.现在我们看到如下:

TestNVC[] -[nvcD willShowViewController]: rootVC
TestNVC[] -[nvcD didShowViewController]: rootVC
TestNVC[] -[nvcD willShowViewController]: 1
TestNVC[] -[nvcD didShowViewController]: 1
TestNVC[] -[nvcD willShowViewController]: 2
TestNVC[] -[nvcD didShowViewController]: 2
TestNVC[] -[vc(2) willMoveToParentViewController [leaving]
TestNVC[] -[nvcD willShowViewController]: 1
TestNVC[] -[vc(2) didMoveToParentViewController [leaving]
TestNVC[] -[nvcD didShowViewController]: 1
TestNVC[] -[vc(1) willMoveToParentViewController [leaving]
TestNVC[] -[nvcD willShowViewController]: rootVC
TestNVC[] -[vc(1) didMoveToParentViewController [leaving]
TestNVC[] -[nvcD didShowViewController]: rootVC

…这样现在更有意义了.

选项2

另一个我没有探索的选项是使用您的NVC子字体,覆盖 – pushViewController:animated:和 – popViewControllerAnimated :,并应用您想要的VC所要求的任何行为,或从弹出窗口返回的VC. (如果您尝试这样做,请务必记住在覆盖中调用super.)

更新总结

所以,感谢phatmann有机会去看这个.我认为我的答案现在更加正确.不过,我并不确定这是“完全不真实的”. 原文链接:https://www.f2er.com/iOS/336596.html

猜你在找的iOS相关文章