关注iphone开发、资讯、软件

iOS 5中UIViewController新功能使用方法介绍

UIViewController在MVC中扮演着控制层的角色,它的基础功能是管理界面中的每一个view,从而控制数据的传输和界面的展示,关于UIViewController的使用技巧大家可以参看这篇文章。但是,今天我们主要介绍一下在iOS 5中UIViewController的一些新使用方法。

下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这 些子ViewController只有一个是显示到父视图中的,可以通过 transitionFromViewController:toViewController:duration:options:animations:completion: 这个方法转换显示的子视图。同时加入相应的动画。

在iOS5中,ViewController中新添加了下面几个方法:

addChildViewController:  
removeFromParentViewController  
transitionFromViewController:toViewController:duration:options:animations:completion: 
willMoveToParentViewController:  
didMoveToParentViewController:
下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这 些子ViewController只有一个是显示到父视图中的,可以通过 transitionFromViewController:toViewController:duration:options:animations:completion: 这个方法转换显示的子视图。同时加入相应的动画。下面以一个例子来说明,最后实现的效果:

点击其中的按钮如下:

下面详细介绍一下上述效果的实现:

  1. 创建项目,changeViewController。
  2. 添加相应的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://easymorse-iphone.googlecode.com/svn/trunk/changeViewController/

iOS 5中UIViewController的新使用方法就介绍到这里了,希望对你有所帮助。

标签: iOS 5, UIViewController
Posted by iOS88 @ 2012/1/26 15:18:22 阅读(233) 评论(0)
上一篇:访问iPod Library的一些总结
下一篇:Objective-C的self.的用法总结

我也来参与讨论

你还可以输入600/600个字符 发表评论
称呼: (必填) 登录 | 开通博客
邮箱: (选填) 你的邮箱地址不会被公开
网站: (选填)
验证码: (必填)
看不清换一张 看不清楚换一张