StoryBoard、Xib 创建控制器

storyBoard创建控制器

1.使用storyboard方式创建控制器对象初始化方法-(instancetype)initWithCoder:(NSCoder *)aDecoder;
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    if (self=[super initWithCoder:aDecoder]) {
        NSLog(@"storyBoard创建控制器初始化代码");
    }
    return self;
}
2、通过xib创建控制器执行的方法initWithNibName:storyboard方式创建控制器对象不会走initWithNibName:...这个方法。
-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    if (self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        NSLog(@"xib创建控制器初始化代码");
    }
    return self;
}
3.拿到指定控制器

在storyboard中如果需要取得界面上的控制器,千万不能通过[alloc init]来创建控制器。

    //如果要拿到storyboard中的控制器,步骤如下:
    //1、在storyboard中选中控制器,给他一个storyBoardID
    //2、拿到主storyboard
    UIStoryboard *main=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
    //3、根据第一步指定的storyBoardID,在主storyboard中根据storyBoardID找到对应的控制器
    YMViewController *ymVC=[main instantiateViewControllerWithIdentifier:@"ymvc"];
    //4、跳转页面
    [self presentViewController:ymVC animated:YES completion:nil];
5.加载Xib视图。
+(YMView *)ymView{
    return [[[NSBundle mainBundle]loadNibNamed:@"YMView" owner:nil options:nil] lastObject];
}
6、通过storyboard连线跳转都会调用如下方法
/*
  >@property (nonatomic, readonly) NSString *identifier;  //连线的标示符
   >@property (nonatomic, readonly) id sourceViewController;  //连线的原来的控制器
   >@property (nonatomic, readonly) id destinationViewController; //连线的目标控制器
*/
//只要执行连线对应的跳转,都会调用方法
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"pushB"]) {
        NSLog(@"现在要跳转b页面");
        NSLog(@"目标控制器:%@",segue.destinationViewController);
        NSLog(@"原来的控制器:%@",segue.sourceViewController);
    }
    else if ([segue.identifier isEqualToString:@"pushC"]){
        NSLog(@"现在跳转c页面");
    }
}
7.storyboard界面传值
//storyBoard中页面跳转的时候,如果有连线,会执行该方法
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    ViewControllerB *vcB=segue.destinationViewController;
    vcB.msg=self.label.text;
    vcB.delegate=self;  //指定vcB代理人是当前控制器,使用代理进行反向传值
}

#pragma mark ViewControllerBDelegate  反向传值时实现代理
-(void)passValue:(NSString *)str{
    self.label.text=str;
}


@protocol ViewControllerBDelegate
-(void)passValue:(NSString *)str;
@end
@interface ViewControllerB : UIViewController
@property (nonatomic,weak)iddelegate;
@end
@implementation ViewControllerB
 if (self.delegate && [self.delegate respondsToSelector:@selector(passValue:)]) {
        [self.delegate passValue:self.textField.text];
    }

你可能感兴趣的:(StoryBoard、Xib 创建控制器)