iOS浅谈storyboard的跳转

Storyboard:

  • IBAction
    • 本质上的返回值是void.
    • 使方法具备连线功能
  • IBOutlet
    • 使属性具备连线功能
  • IBOutlet容易产生的错误:
    • 当控件连线后,将代码注释掉,程序一运行便会cache掉,报[setvalue: forUndefinedKey] this class is not key value coding-complaint for the key xxx的错误

1、获取控制器

//通过storyboard创建控制器
//先加载storyboard文件(Test是storyboard的文件名)
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
//接着初始化storyboard中的控制器
//初始化“初始控制器”(箭头所指的控制器)
MyViewController *firstVC = [storyboard instantiateInitialViewController];

//通过一个标识初始化对应的控制器
DetailViewController *detailVC = [storyboard instantiateViewControllerWithIdentifier:@"detail"];

2、storyboard手动跳转

(
image

)


image
- (IBAction)gotoPush:(id)sender {
    if ([self.btn.titleLabel.text isEqualToString:@"跳转到B"]) {
        [self performSegueWithIdentifier:@"vcB" sender:@"BBBBB"];
    }else {
        [self performSegueWithIdentifier:@"vcA" sender:@"AAAA"];
    }
}
//执行performSegueWithIdentifier时会调用这个方法(准备跳转前调用)
//一般在此方法中传递数据
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIViewController *sourceVC = segue.sourceViewController;//源控制器
    UIViewController *desVC = segue.destinationViewController;//目标控制器
    //reason: 'Pushing the same view controller instance more than once is not supported
    //[segue perform];//默认会调用这个方法,自己不能写
}

跟xib一起走过的坑

  • (1) 如果在xib中有一个控件, 已经明确设置尺寸了,输出的frame也是对的, 但是显示出来的效果不一样(比如尺寸变大了), 如果是这种情况一般就是autoresizingMask自动伸缩属性在搞鬼! 解决办法如下:
//xib的awakeFromNib方法中设置UIViewAutoresizingNone进行清空
- (void)awakeFromNib {
self.autoresizingMask = UIViewAutoresizingNone;
}
  • (2)如果你的控制器的view是用xib创建的, 当你拿到view的尺寸是不准确的, 在这里我们就需要通过[UIScreen mainScreen].bounds拿到尺寸, 但是storyboard的尺寸是准确的!

你可能感兴趣的:(iOS浅谈storyboard的跳转)