这篇文章是给大家总结的关于UIViewController跳转的问题!满满的全是干货。
一:UIViewController模态跳转
知识点1:
a: 在官方文档中,建议这两者之间通过delegate实现交互。例如使用UIImagePickerController从系统相册选取照片或者拍照,imagePickerController和弹出它的VC之间就通过UIImagePickerControllerDelegate实现交互的。
b: 控制器的中的只读属性:presentedViewController和presentingViewController,他们分别就是被present的控制器和正在presenting的控制器。
c: Modal的效果:默认是新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止。但可以通过自定义转场来改变展现view的动画,大小,位置,是否移除跳转之前的view.这个效果可以用来模拟ipad特有的Popover弹出框。
d: 需要注意的是,默认他的实现过程是移除跳转之前的控制器的view,并将新的控制器的view展示,但跳转之前的控制器并没有被释放,而是被强引用这的。区别于导航控制器的push。
e: 通过 dismissViewControllerAnimated 来返回前一个界面的
知识点2:例如在当前A控制器利用模态跳转到另一个B控制器
知识点3:两个重要的枚举对象
二:导航控制器UINavigationController跳转
知识点1:popToViewController用法
知识点2:iOS解决使用模态视图 导致无法pushViewController
模态视图默认从界面底部滑出并占据整个界面,并短暂地显示与之前不同的界面,直到用户完成某项操作。模态视图完成和程序主功能有关系的独立任务,尤其适合于主功能界面中欠缺的多级子任务。例如撰写新邮件时的模态视图.
例如:
当登录界面的作为模态视图的话. 当我们离开当前界用presentViewController弹出登录界面的话..就会导致在登录界面这个模态视图中视图间的跳转会失效. 这是由于模态视图其实是不同于导航控制器的新的视图, 并且只有将这个视图处理完成后才能回到原来的视图. 模态视图就相当于死胡同 进入就必须原路返回, 也就是不可以在模态视图中执行页面跳转.
也就是模态中无法获取导航控制器 表现在代码里则:self.navigationController是空的,哪如何让模态中的self.navigationController不空呢, 也就很简单了, 只需要将登录这个视图控制器封装成navigationController 弹出来, 而这个模态只作为这个navigationController的rootViewController即可
UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:loginVC];
[self.navigationController presentViewController:navi animated:YES completion:nil];
然后, 在这个模态中视图的跳转就可以有我们传过来的这个导航控制器完成了,表现在代码;则:self.navigationController是存在的. 如果再想跳转就可以用pushViewController了;因为包装了一层navigationController这个'模态'会有导航栏 自行隐藏即可
退出模态视图:
[self dismissViewControllerAnimated:YES completion:nil];
知识点3:解决使用[self.navigationController pushViewController:VC animated:YES]; push卡顿
本文摘自:http://www.cdtedu.com/ios/course/8078.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31382915/viewspace-2124259/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31382915/viewspace-2124259/