版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lym594887256/article/details/52628708
什么是Segue
Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)
Segue的属性
每一个Segue对象,都有3个属性:
- 唯一标识
@property (nonatomic, readonly) NSString *identifier;
- 来源控制器
@property (nonatomic, readonly) id sourceViewController;
- 目标控制器
@property (nonatomic, readonly) id destinationViewController;
自动型Segue
按住Control键,直接从控件拖线到目标控制器
点击“登录”按钮后,就会自动跳转到右边的控制器
如果点击某个控件后,不需要做任何判断,一定要跳转到下一个界面,建议使用“自动型
手动
按住Control键,从来源控制器拖线到目标控制器
手动型的Segue需要设置一个标识(如图)
在恰当的时刻,使用perform方法执行对应的Segue
[self performSegueWithIdentifier:@"login2contacts" sender:nil];
Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用
注:*如果点击某个控件后,需要做一些判断,也就是说:满足一定条件后才跳转到下一个界面,建议使用“手动型Segue”*
重要函数(处理跳转前的操作)
performSegueWithIdentifier:sender:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;
// 这个sender是当初performSegueWithIdentifier:sender:中传入的sender
- 调用Segue对象的- (void)perform;方法开始执行界面跳转操作
- 如果segue的style是push
- 取得sourceViewController所在的UINavigationController
- 调用UINavigationController的push方法将、
- destinationViewController压入栈中,完成跳转
- 如果segue的style是modal:
调用sourceViewController的presentViewController方法将destinationViewController展示出来
顺传值
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"触发该的sender对象是:%@",[sender class]);
// kvo 传值
UIViewController *destinationController=[segue destinationViewController];
[destinationController setValue:@"119" forKey:@"number"];
// 使用属性传值,需导入相关的类.h
TestViewController *bC=[segue destinationViewController];
bC.number=@188;
}