[iOS]和ViewController切换有关的一个问题

这个星期在书上看到一个问题,说A–>push B,B–>push C,但是我希望C直接返回到A,对这个问题,大致有几个思路吧:

  1. 自定义navigationbar的返回事件,然后利用@selector(popToViewController:animation:)来调到指定ViewController;
  2. 在popViewControllerAnimated:的时候,我们执行两次,这样以期达到跳过ViewController的目的;
  3. 重写UINavigationController的push和pop方法。

以上思路也都没有问题,但是在众多的思路中,应该有一个既解决问题,又让人觉得非常简单地好办法的。要找到这样的办法,当然就得去实验一下了。第1个思路可以解决问题,但是需要在C对象出现A对象的影子。第2个思路执行时会出现问题,我在Xcode7上运行产生一个警告,这个还有瑕疵。第3个就需要好好考虑一下了,我的一个办法是自定义一个数组,push就增加,pop就减少,单独提供一个removeObject的接口,在pop里面改用popToViewController:animation:,这个就是一个重思路,就是简单问题复杂化。

应该有简单地解决思路,是的,确实有一个简单地解决办法,就是在B push C时,先把B出栈,然后让C入栈,我们唯一需要考虑就是页面的平滑过渡。好在SDK里面的API都有支持,下面的代码就是主要的核心过程。可能有人尝试过优化一下第一句,直接用self.navigationController来pop和push乐,至于什么结果你自己去尝试就知道了,总之,要想一想出栈之后,这个self和navigationController之间的关系还存在吗?想通了这个,也就明白了这个简单地思路了。

1
2
3
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:[[TestViewController alloc] init ] animated:YES];
作者: Peter
出处: http://codefunny.github.io/
本文基于
署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 Peter(包含链接)。