UIView的AddChildViewCtroller的用法(4中页面切换方式)

来源:互联网 发布:js单例模式用处 编辑:程序博客网 时间:2024/05/17 06:49

UIView的AddChildViewCtroller的用法

———子控制器视图的切换

一.视图控制器的4种切换方式

1.使用presentViewController方法进行切换

适合于顺序型的页面转换,比如说某中验证(登录信息)型的,而且可以通过dismissViewController方便的回到父页面,默认动画从上而下。

2.使用pushViewController方法(前提是使用了导航控制器)

可以很方便的返回,层次感比较强,切换方式为左右,跳转到某个特定的控制器。

返回上一个页面调用popViewController

问题:在IB中生成含导航控制器的页面,代码中怎么对这个页面传输数据了?

答:可以通过获取到导航控制器,使用它的viewController属性和对应的下标可以得到相应控制器的对象,并可对它修改或赋值,跳转页面后有效。

3.使用addChildViewController方法

在没有导航控制器的情况下在多层次的视图页面中自由跳转,优点:

1.页面逻辑很清晰,相应的View对应相应的ViewController。

2.当某个子View没有显示时,将不会被Load,减少了内存的使用。

3.当内存紧张时,没有Load的View将被首先释放,优化了程序的内存释放机制。

4.一个页面中可以添加多个ViewController,并且可以在需要显示时才load它

5.页面的切换方式可以在transitionViewController中选择(左右、上下、融化)

ios5后ViewController中新添加了下面几个方法。

addChildViewController:    removeFromParentViewController   transitionFromViewController:toViewController:duration:options:animations:completion:  //切换页面显示调用willMoveToParentViewController: didMoveToParentViewController:


4.在IB中使用Ctrol+左键连接的控制器跳转(最简单),不过需要在切换页面中做点什么就比较麻烦。


二.使用AddChildViewcontroller切换视图(Object-C)

使用AddChildViewcontroller简单切换视图、可以运用到多分栏子页面切换(没有切换父控制器),以下只是简单使用AddChildViewcontroller,并没有明显切换过程,如果需要,可以自己添加按钮切换。

#import "ViewController.h"@interface ViewController ()@property (nonatomic,strong) UIViewController *VC1;@property (nonatomic,strong) UIViewController *VC2;@property (nonatomic,strong) UIViewController *VC3;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    //1.准备多个控制器(可以来自nib文件),实际开发可根据需要再初始化。    self.VC1 = [[UIViewController alloc]init];    self.VC2 = [UIViewController new];    //self.VC2.view.backgroundColor = [UIColor greenColor];所以默认的UIView如果不加颜色是可以透明的。    self.VC3 = [UIViewController new];    for (int i=0; i<3; i++) {        UILabel *lb = [[UILabel alloc]initWithFrame:CGRectMake(100, 50, [UIScreen mainScreen].bounds.size.width/3, 20)];                lb.backgroundColor = [UIColor redColor];        if(i==0){
<pre name="code" class="objc"><span style="white-space:pre"></span>lb.text = @"测试1";
[self.VC1.view addSubview:lb]; }else if (i == 1){ lb.text = @"视图2"; [self.VC2.view addSubview:lb]; }

    //2.将控制器添加到子控制器中(调用addChildViewController方法)    [self addChildViewController:_VC2]; //只有两层,不会显示子控制器视图上的东西    [self addChildViewController:_VC1];    [self.view addSubview:_VC2.view];//这样是允许的,会直接使用VC2的View(单独)。
    //3.过渡控制器(调用TransitionFromViewController方法)。    [self transitionFromViewController:self.VC2 toViewController:self.VC1 duration:4 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{        nil;//过度过程做些什么    } completion:^(BOOL finished) {        NSLog(@"转换过度中"); //过度之后做些什么    }];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end
发现:UIView默认是可以透明的(可以显示上一个视图中的控件),但是添加了背景颜色就不可以了。


0 0
原创粉丝点击