首页 > 代码库 > [iOS基础控件 - 6.11.4] storyboard 的 Segue
[iOS基础控件 - 6.11.4] storyboard 的 Segue
A.概念
storyboard中的跳转事件连线,都是一个UIStoryboardSegue对象(Segue)
来源控制器
触发控制器
目标控制器
跳转到的控制器
Segue的属性:
每一个Segue对象,都有3个属性
唯一标识
@property (nonatomic, readonly) NSString *identifier;
来源控制器
@property (nonatomic, readonly) id sourceViewController;
目标控制器
唯一标识
@property (nonatomic, readonly) NSString *identifier;
来源控制器
@property (nonatomic, readonly) id sourceViewController;
目标控制器
@property (nonatomic, readonly) id destinationViewController;
B.种类
1.自动型
action segue
使用控件连线
不需要进行条件判断的跳转(比如按钮)
设置方法:按Control,拖线从控件(开关、按钮等)到目标控制器
2.手动型 Manual
manual segue
使用控制器连线
需要进行一定的条件判断的跳转(使用代码)
手动的Segue需要设置标识,在制定的时候在来源控制器执行Segue
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传递数据
顺传
控制器的跳转方向: A C
数据的传递方向 : A C
数据的传递方式 : 在A的prepareForSegue:sender:方法中根据segue参数取得destinationViewController, 也就是控制器C, 直接给控制器C传递数据
(要在C的viewDidLoad方法中取得数据,来赋值给界面上的UI控件)
逆传
控制器的跳转方向: A C
数据的传递方向 : C A
数据的传递方式 : 让A成为C的代理, 在C中调用A的代理方法,通过代理方法的参数传递数据给A
控制器的跳转方向: A C
数据的传递方向 : C A
数据的传递方式 : 让A成为C的代理, 在C中调用A的代理方法,通过代理方法的参数传递数据给A
[iOS基础控件 - 6.11.4] storyboard 的 Segue
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。