在NavigationController中,调用pushViewController可以将界面推到指定的界面,调用popToViewController可以返回上层界面,可是它的实现原理是什么?

好吧,说到原理,就要看源码,可是源码被封装了,看不到,那就不谈原理,那就谈谈 它为什么知道你pop的是上一层的viewcontroller,而不是别的呢?在Navigationcontroller的属性列表中,我们可以发现一个属性:viewControllers ,对,就是它! 它将你所有push的viewcontroller 全部装进,然后通过索引来找到你要pop的viewcontroller。

如果当前界面在viewControllers 中的索引是 3,那么popToViewController(返回上层界面) 只是 拿到索引是2的vc。

知道这个原理,那么我们不就可以为所欲为的返回到指定界面了吗?

来一个返回2级界面的代码:

 //当前vc 在数组中的索引
NSInteger index=[kAPPDELEGATE.navigationController.viewControllers indexOfObject:self];
//退出成功 获取素组中 当前索引-2 的viewcontroller,然后popTo指定vc
[kAPPDELEGATE.navigationController popToViewController:[kAPPDELEGATE.navigationController.viewControllers getObjectAtIndex:index-] animated:YES];

时间紧迫,写一些 NavigationController 一次性返回2级界面甚至更多级的界面的更多相关文章

  1. navigationController 的返回按钮自定义

    1: navigationController 的返回按钮自定义 SecondViewController *secondVC = [SecondViewController new];       ...

  2. 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果

    package com.rui.test; import java.util.Random; /** * @author poseidon * @version 1.0 * @date:2015年10 ...

  3. NavigationController的返回按钮自定义

    假设需求时这样: NavigationController下有2个视图,从A视图会Push到B视图,默认情况下,当显示视图B时,视图B的导航bar上会出现返回按钮,按钮标题文字默认为A视图的title ...

  4. 用eval似乎会执行结果一次性返回,结果显示的是一行

    with open(r'商品资料','r',encoding='utf-8') as f1: lis_goods = eval(f1.read()) # 用eval似乎会执行结果一次性返回,结果显示的 ...

  5. 用 Python 写个贪吃蛇,保姆级教程!

    本文基于 Windows 环境开发,适合 Python 新手 本文作者:HelloGitHub-Anthony HelloGitHub 推出的<讲解开源项目>系列,本期介绍 Python ...

  6. 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。

    /** 转换成XML格式字符串 **/ public static String doXMLStr(Map<String, String> map) { StringBuffer xml_ ...

  7. web api写api接口时返回

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  8. python 统计时间,写日志

    python 统计时间使用time模块,写日志使用logging模块,这两个都是标准模板. 测试socket使用socket模块 # 统计时间 ---------------------- impor ...

  9. 两周的业余时间,写了个简单的shell

    Linux下的,环境是 Fedora 实现了基本的内部命令功能,及比较完善的内部命令框架. 类似于MFC消息映射表的方式,写完一个内部命令,只需要向这个头文件中,导入一个头文件,再写入命令处理函数,就 ...

随机推荐

  1. 手机通过WIFI连上ZXV10 H618B路由器但不能上网问题的解决

    前几天朋友帮忙拿到一个ZXV10 H618B路由器,一看需要12V供电,还好以前留下一个12V输出的DC充电器,关键时刻用上了,先大概下载了此路由器的用户手册,发现原来是08年的产品,都5年了. 开始 ...

  2. You must supply a layout_width attribute的错误原因及解决办法

    学习android的过程中,尝试新功能,结果出现了这个一个error: 05-21 15:38:52.745: E/AndroidRuntime(17608): java.lang.RuntimeEx ...

  3. flask开发遇到Internal Server Error的解决办法

    flask开发过程中遇到了Internal Server Error错误,可以在代码加上debug app.debug=True 这样就能看到错误信息了

  4. write_chip,read_chip

    int write_chip(UINT32 addr, UINT32 data) { if(0 == fpgaRWMode) /* localbus mode */ { UINT16 datah, d ...

  5. 走迷宫(DFS)

    题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2449&cid=1181 目前dfs 里的递归还是不很懂,AC代码如下: #incl ...

  6. 在Silverlight中的DispatcherTimer的Tick中使用基于事件的异步请求

    需求:在silverlight用户界面上使用计时器定时刷新数据. 在 Silverlight 中的 DispatcherTimer 的 Tick 事件 中使用异步请求数据时,会出现多次请求的问题,以下 ...

  7. (转载) ExtJs大比拼JQuery:Dom文档操作

    此次不生产水,做一次搬运工. http://www.cnblogs.com/lipan/archive/2011/12/07/2269815.html

  8. RPi 2B SD read-only filesytem

    /**************************************************************************** * RPi 2B SD read-only ...

  9. postgresql 行转列,拼接字符串

    create table k_user ( op_id ) not null, op_name ) not null, password ) not null, real_name ) not nul ...

  10. Android调试工具及方法

    转自:http://www.cnblogs.com/feisky/archive/2010/01/01/1637566.html Logcat Dump一份系统消息的日志.这些消息包括模拟器抛出错误时 ...