addChildViewController、removeFromParentViewController等语法
来源:互联网 发布:mp3剪切大师软件 编辑:程序博客网 时间:2024/05/22 03:12
在iOS5中,ViewController中新添加了下面几个方法:
addChildViewController:
removeFromParentViewController
transitionFromViewController:toViewController:duration:options:animations:completion:
willMoveToParentViewController:
didMoveToParentViewController:
下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这些子ViewController只有一个是显示到父视图中的,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。下面以一个例子来说明,最后实现的效果:
下面详细介绍一下上述效果的实现:
创建项目,changeViewController。
添加相应的viewController,MainViewController、FirstViewController、SecondViewController、ThirdViewController。如下图:
3.把MainViewController添加到window中。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
MainViewController *mainViewController=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
self.window.rootViewController=mainViewController;
[self.window makeKeyAndVisible];
return YES;
}
4.在MainViewController中添加三个按钮,并且连接onClickbutton方法。
5.在MainViewController中添加三个子controller
#pragma mark – View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self addChildViewController:firstViewController];
SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self addChildViewController:secondViewController];
ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[self addChildViewController:thirdViewController];
[contentView addSubview:thirdViewController.view];
currentViewController=thirdViewController;
}
其中要把其中的一个子controller的view添加到根视图中,这样才能显示出相应的视图。
6.点击按钮,切换视图。
-(IBAction)onClickbutton:(id)sender
{
FirstViewController *firstViewController=[self.childViewControllers objectAtIndex:0];
ThirdViewController *thirdViewController=[self.childViewControllers objectAtIndex:2];
SecondViewController *secondViewController=[self.childViewControllers objectAtIndex:1];
if ((currentViewController==firstViewController&&[sender tag]==1)||(currentViewController==secondViewController&&[sender tag]==2) ||(currentViewController==thirdViewController&&[sender tag]==3) ) {
return;
}
UIViewController *oldViewController=currentViewController;
switch ([sender tag]) {
case 1:
{
NSLog(@"留言及回复");
[self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
} completion:^(BOOL finished) {
if (finished) {
currentViewController=firstViewController;
}else{
currentViewController=oldViewController;
}
}];
}
break;
case 2:
{
NSLog(@"生日提醒");
[self transitionFromViewController:currentViewController toViewController:secondViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromTop animations:^{
} completion:^(BOOL finished) {
if (finished) {
currentViewController=secondViewController;
}else{
currentViewController=oldViewController;
}
}];
}
break;
case 3:
{
NSLog(@"好友申请");
[self transitionFromViewController:currentViewController toViewController:thirdViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{
} completion:^(BOOL finished) {
if (finished) {
currentViewController=thirdViewController;
}else{
currentViewController=oldViewController;
}
}];
}
break;
default:
break;
}
}
其中我把按钮设置成不同的tag了。
这时候点击按钮,就可以切换子视图了。
这样写的好处:
多个UIViewController之间切换可以添加动画
当内存警告的时候,可以把当前不是激活状态的ViewController内存释放。
可以把代码更好分开
原文:http://wangjun.easymorse.com/?p=1630
- addChildViewController、removeFromParentViewController等语法
- removeFromParentViewController
- addChildViewController等方法
- addChildViewController等方法
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController:
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- oracle 10g提示java.lang.Exception Exception in sending Request null解决方案
- Xcode 5 解决第三方库在iPhone 5s出现的问题
- 杨丰盛老师《Cocos2D-X跨平台游戏课程》
- IP及主机名设置_Linux运维笔记
- SPI内核驱动模型-dm8127
- addChildViewController、removeFromParentViewController等语法
- 查看TOMCAT内存使用情况 以及修改方法
- 泛型与容器(5)——总结
- [Python]Shallow and Deep copy operation
- 实现BorderLayout 布局
- Timer 只执行一次?怎么做呢?
- 计算sdcard上的剩余空间
- HDU 2768
- 从SEO来看,做网站该注意哪些基本要素