UINavigationController的setViewControllers方法
2016-07-04 15:45
393 查看
在iOS开发中,UINavigationController是很常用的Controller,对它的一般操作就像操作一个栈,push和pop。但也经常会遇到pop和push无法优雅的完成的操作,比如退回到中间的某个VC上,或者在第一个VC之前添加一个VC等,更甚者要重新构造整个VC的顺序,这时候setViewControllers方法就排上用场了,它使对VC栈的操作不再局限于push和pop,而是构造整个VC栈并应用到当前的UINavigationController中,这个方法支持iOS3.0+,放心使用。
例如:当前我处于视图控制器A ,我想打开一个视图控制器C,但出于某个目的(预加载)打开控制器B,但又想保留之前的控制器栈
执行后,控制器跳转至C,在C中执行
你会发现是回到B,而不是A
例如:当前我处于视图控制器A ,我想打开一个视图控制器C,但出于某个目的(预加载)打开控制器B,但又想保留之前的控制器栈
NSMutableArray * viewControllers = [self.navigationController.viewControllers mutableCopy];//获取到当前导航控制器栈中所有vc UIViewController *vcB=[UIViewController new]; UIViewController *vcC=[UIViewController new]; [viewControllers addObjectsFromArray:@[vcB,vcC]]; [self.navigationController setViewControllers:viewControllers animated:YES]; // [viewControllers relase] // if non-arc
执行后,控制器跳转至C,在C中执行
[self.navigationController popViewControllerAnimated:NO];
你会发现是回到B,而不是A
说明
下面这段摘自Api文档You can use this method to update or replace the current view controller stack without pushing or popping each controller explicitly. In addition, this method lets you update the set of controllers without animating the changes, which might be appropriate at launch time when you want to return the navigation controller to a previous state. If animations are enabled, this method decides which type of transition to perform based on whether the last item in the items array is already in the navigation stack. .If the view controller is currently in the stack, but is not the topmost item, this method uses a pop transition; .if it is the topmost item, no transition is performed. .If the view controller is not on the stack, this method uses a push transition. Only one transition is performed, but when that transition finishes, the entire contents of the stack are replaced with the new view controllers. For example, if controllers A, B, and C are on the stack and you set controllers D, A, and B, this method uses a pop transition and the resulting stack contains the controllers D, A, and B. <br /> Have fun! <br /> <br />
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- 浅析iOS应用开发中线程间的通信与线程安全问题
- iOS中的UIKeyboard键盘视图使用方法小结
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法