新术语: segue, 它用来表示"连接"的概念, 在图像上就是连接controller的线条
描述: 为把所有xib集中在一个.storyboard文件, 并用segue连接起来
优势:
1. 提供big picture, 更好的管理UI
2. 提供图形化的tableview建立static cell的流程, 省去hard code的datasource
3. 让非程序员(co-developers, clients)更好的理解程序的workflow
[2] 如何在跳转的时候给目标ViewController传值?
1. 连接segue: ctrl+拖拽, 需要填写segue identifier, 建议#define到一块; 最好在代码中跳转, 这样更好等控制时机.
2. 跳转代码:
1
|
[
self
performSegueWithIdentifier:@
"yoursegueid"
sender:
self
];
|
3. 数据传递:
过去的数据传递是这样的:
现在:
1. storyboard中连好A->B
2. 在A.m中:
1
2
3
4
5
6
7
8
9
|
- (
void
)prepareForSegue:(UIStoryboardSegue *)segue sender:(
id
)sender
{
if
([segue.identifier isEqualToString:@
"yoursegueid"
])
{
B *b = (B *)segue.destinationViewController;
b.name = ...;
b.image = ...;
}
}
|
这段代码会在A通过segue跳转到任何页面时执行, 所以需要判断segue id.
[3] 拆分成多个Storyboard文件的方法
这样做有几个好处:
1. svn协作, 每个人负责自己的故事板, 避免冲突
2. 避免超大故事板导致的卡机
拆分产生的第一个问题是: 如何连接几个故事版?
跳转到另一个故事版的初始控制器:
1
2
3
4
|
// 取得目标故事板的对象
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@
"SecondStoryboard"
bundle:
nil
];
// 获取目标故事板的初始视图控制器并跳转
[
self
.navigationController pushViewController:storyboard.instantiateInitialViewController animated:
YES
];
|
跳转到故事板任意的视图控制器:
1.首先要给目标控制器起一个故事板id:
2. 跳转代码
1
2
3
4
|
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@
"secondStoryboard"
bundle:[
NSBundle
mainBundle]];
// 通过storyboard id拿到目标控制器的对象
viewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@
"storyboard id"
];
[
self
presentModalViewController:viewController animated:
YES
];
|