[iOS基础控件 - 6.11.4] storyboard 的 Segue

A.概念
storyboard中的跳转事件连线,都是一个UIStoryboardSegue对象(Segue)
DA737EED-B13F-459B-88BD-D6BD0E637BB1
 
来源控制器
     触发控制器
目标控制器
     跳转到的控制器
 
17D21C75-B95D-4FD1-A4F9-CF199165146F
 
Segue的属性:
每一个Segue对象,都有3个属性
唯一标识
@property (nonatomic, readonly) NSString *identifier;
来源控制器
@property (nonatomic, readonly) id sourceViewController;
目标控制器
@property (nonatomic, readonly) id destinationViewController;
 
Image(248)
 
B.种类
1.自动型
action segue
使用控件连线
不需要进行条件判断的跳转(比如按钮)
D369BA63-5048-4B4A-8815-A7390A87C329
 
设置方法:按Control,拖线从控件(开关、按钮等)到目标控制器
 
2.手动型 Manual
manual segue
使用控制器连线
需要进行一定的条件判断的跳转(使用代码)
EB85687E-FCF4-4312-92D6-F6A919AA6D65
 
手动的Segue需要设置标识,在制定的时候在来源控制器执行Segue
Image(249)
 
sample:
1         // 根据Segue ID 执行跳转
2         [self performSegueWithIdentifier:@"contactList" sender:nil];
 
3.传递数据
在Segue准备好,跳转之前执行来源控制器的方法,使用成员属性传递数据
prepareForSegue: sender:
sample:
 1 #pragma mark - Segue相关
 2 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 3     // 取得目标控制器
 4     id controller = segue.destinationViewController;
 5    
 6     // 判断跳转目标
 7     if ([controller isKindOfClass:[AddViewController class]]) {
 8         // 如果是“添加联系人”
 9         AddViewController *addViewController = controller;
10         addViewController.delegate = self;
11     }
12    
13     if ([controller isKindOfClass:[EditViewController class]]) {
14         // 如果是“查看/编辑联系人”
15         EditViewController *editViewController = controller;
16        
17         // 取出数据
18         NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
19         editViewController.contact = self.contacts[indexPath.row];
20        
21         // 设置代理
22         editViewController.delegate = self;
23     }
24   
25 }
 
控制器之间的数据传递主要有2种情况:顺传和逆传
顺传
控制器的跳转方向: A  C
数据的传递方向    : A  C
数据的传递方式    :  在A的prepareForSegue:sender:方法中根据segue参数取得destinationViewController, 也就是控制器C, 直接给控制器C传递数据
(要在C的viewDidLoad方法中取得数据,来赋值给界面上的UI控件)
 
逆传
控制器的跳转方向: A  C
数据的传递方向    : C  A
数据的传递方式    :  让A成为C的代理, 在C中调用A的代理方法,通过代理方法的参数传递数据给A
 
Image(250)
 
posted @ 2014-12-27 00:28  HelloVoidWorld  阅读(461)  评论(0编辑  收藏  举报