三种ViewController跳转的异同
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
MainVC *mainVC = [[MainVC alloc] init]; [self presentViewController:mainVC animated:YES completion:nil];
这种方式一般出现在需要使用者完成某件事情,如输入密码、增加资料等操作后,才能(回到跳转前的控制器)继续。例如系统的WIFI连接输入密码提示。默认动画是从下至上。
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
这种方式一般是使用者浏览资料,继而可以前进到下一个页面或回到上一个页面。默认动画是从右至左。
- (void)addChildViewController:(UIViewController *)childController
这个方法出现在iOS5以后,通过它即使不使用NavigationController也能够实现view hierarchy。有以下优点:
1.页面逻辑很清晰,相应的View对应相应的ViewController。
2.当某个子View没有显示时,将不会被Load,减少了内存的使用。
3.当内存紧张时,没有Load的View将被首先释放,优化了程序的内存释放机制。
#import "ViewController.h"
#import "FirstVC.h"
#import "SecondVC.h"
#import "ThirdVC.h" @interface ViewController ()
{
FirstVC *firstVC;
SecondVC *secondVC;
ThirdVC *thirdVC;
} @property (weak, nonatomic) IBOutlet UIView *contentView; @property (strong, nonatomic) UIViewController *currentVC; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. firstVC = [[FirstVC alloc] init];
secondVC = [[SecondVC alloc] init];
thirdVC = [[ThirdVC alloc] init]; [self addChildViewController:firstVC];
[self addChildViewController:secondVC];
[self addChildViewController:thirdVC]; [self.contentView addSubview:thirdVC.view]; self.currentVC = thirdVC;
} - (IBAction)onClick:(id)sender {
if(self.currentVC==firstVC && [sender tag]==) {
return;
} if(self.currentVC==secondVC && [sender tag]==) {
return;
} if(self.currentVC==thirdVC && [sender tag]==) {
return;
} UIViewController *oldVC = self.currentVC; switch ([sender tag]) {
case : {
[self transitionFromViewController:self.currentVC toViewController:firstVC duration: options:UIViewAnimationOptionTransitionCurlUp animations:^{ } completion:^(BOOL finished) {
if(finished) {
self.currentVC = firstVC;
}
else {
self.currentVC = oldVC;
}
}];
}
break;
case : {
[self transitionFromViewController:self.currentVC toViewController:secondVC duration: options:UIViewAnimationOptionTransitionCurlUp animations:^{ } completion:^(BOOL finished) {
if(finished) {
self.currentVC = secondVC;
}
else {
self.currentVC = oldVC;
}
}];
}
break;
case : {
[self transitionFromViewController:self.currentVC toViewController:thirdVC duration: options:UIViewAnimationOptionTransitionCurlUp animations:^{ } completion:^(BOOL finished) {
if(finished) {
self.currentVC = thirdVC;
}
else {
self.currentVC = oldVC;
}
}];
}
break;
default:
break;
}
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
三种ViewController跳转的异同的更多相关文章
- sea.js及三种加载方式的异同
一.前言 浏览器本身并不提供模块管理的机制,过去网页开发中,为了使用各种模块,不得不在加入一大堆script标签.这样就使得网页体积臃肿,难以维护,还产生大量的HTTP请求,拖慢显示速度, ...
- asp.net跳转页面的三种方法比较
目前,对于学习asp.net的很多朋友来讲,实现跳转页面的方法还不是很了解.本文将为朋友们介绍利用asp.net跳转页面的三种方法,并对其之间的形式进行比较,希望能够对朋友们有所帮助. ASP.NET ...
- ASP.NET页面跳转的三种方法比较
在ASP.NET下,经常需要在页面之间跳转,下面我们来分别介绍一下关于.NET中Response.Redirect(),Sever.Execute(),Server.Transfer() 三种页面跳转 ...
- C#中三种定时器对象的比较
·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers ...
- C#中三种定时器对象的比较 【转】
https://www.cnblogs.com/zxtceq/p/5667281.html C#中三种定时器对象的比较 ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.W ...
- Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同
一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个 ...
- storyboard三种sugue 和 跳转场景的三种方式 以及控制器之间的传值
Storyboard引入了2个概念:1. scene:一个场景,由一个viewController和相关的xib表示. 2. segue:在这是用于连接scenes,其有多种类型,iphone包括:P ...
- asp.net跳转页面的三种方法比较(转)
2006-10-20 14:32 [小 大] 来源: 博客园 评论: 0分享至: 百度权重查询 词库网 网站监控 服务器监控 SEO监控 手机游戏 iPhone游戏 今天老师讲了三种跳转页面的方法,现 ...
- iOS开发 跳转场景的三种方式
iOS开发 跳转场景的三种方式 2012年10月17日, 15:32 假设A跳转到B,三种方法:1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任 ...
随机推荐
- [JS11] 状态栏滚动
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- cookie入门与学习
据我对cookie诞生背景的了解,cookie是由网景公司创建的,目的就是将用户的数据储存在客户端上.伴随的HTML5的出现,现在又有另外一个解决数据离线储存的方案,就是HTML5中的Web stor ...
- js中的hasOwnProperty()和isPrototypeOf()
js中的hasOwnProperty()和isPrototypeOf() 这两个属性都是Object.prototype所提供:Object.prototype.hasOwnProperty()和Ob ...
- [jQuery学习系列二 ]2-JQuery学习二-数组操作
前言 上一篇内容 已经对于Jquery 有了一些认识, 包括Jquery的选择器和DOM对象, 那么这一篇继续来看下Jquery中很实用的Jquery对于数组的操作. Jquery中对数组的操作大致有 ...
- How to use AKBusGpsParser
step 01: sudo easy_install AKBusGpsParser step02: Let's see a sample #!/usr/bin/python #coding:UTF-8 ...
- jQuery实现Checkbox中项目开发全选全不选的使用
<html> <head> <meta charset="utf-8"> <title>Checkbox的练习</title& ...
- jquery时间倒计时
代码: js: function countDown(time, id) { //time的格式yyyy/MM/dd hh:mm:ss var day_elem = $(id).find('. ...
- Java插件开发-取插件下的某个文件
//找到插件所在处 Bundle bundle = Activator.getDefault().getBundle(); //根据插件转义成URL路径 URL url = FileLocator.t ...
- Django项目深入理解
python应用松耦合比方说,考虑有一个以前写的视图函数,这个函数显示当前日期和时间.如果我们想把它的URL 从原来的 /time/ 改变到/currenttime/ ,我们只需要快速的修改一下URL ...
- sqlserver卡号段分组
之前给上海一家电子商务公司做一个卖卡系统,遇到了卡号段分组的问题.刚开始没什么好的实现方法,遂在博客园求助但未果,没法自己研究sql,终于搞定. 问题描述: 有个卡库存表,有个卡号字段,假设数据:16 ...