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<NSObject>
-(void)passValue:(NSString *)str;
@end
@interface ViewControllerB : UIViewController
@property (nonatomic,weak)id<ViewControllerBDelegate>delegate;
@end
@implementation ViewControllerB
if (self.delegate && [self.delegate respondsToSelector:@selector(passValue:)]) {
[self.delegate passValue:self.textField.text];
}