iOS 5中UIViewController

来源:互联网 发布:vb连接oracle 编辑:程序博客网 时间:2024/05/22 13:43

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/

0 0