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的尺寸是准确的!
网友评论