Segue
Segue
Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)
Segue的属性
每一个Segue对象,都有3个属性唯一标识@property(nonatomic,readonly)NSString*identifier;来源控制器@property(nonatomic,readonly)idsourceViewController;目标控制器@property(nonatomic,readonly)iddestinationViewController;
Segue的类型
根据Segue的执行(跳转)时刻,Segue可以分为2大类型
自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转
手动型:需要通过写代码手动执行Segue,才能完成界面跳转 在恰当的时刻,
使用perform方法执行对应的Segue[selfperformSegueWithIdentifier:@"login2contacts"sender:nil];
performSegueWithIdentifier底层实现: [selfperformSegueWithIdentifier:@"login2Contact"sender:nil];// 1.根据Identifier去storyboard中查找segue,并且创建segue对象// 2.设置segue来源控制器 segue.sourceVc = self// 3.创建目的控制器,并且设置segue的目的控制器// 4.通知来源控制器,准备好segue,prepareForSegue// 5.[segue perform]// 5.1 拿到导航控制器self.navigationController// 5.2 push [self.navi
// Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用
如果点击某个控件后,不需要做任何判断,一定要跳转到下一个界面,建议使用“自动型Segue”
如果点击某个控件后,需要做一些判断,也就是说:满足一定条件后才跳转到下一个界面,建议使用“手动型Segue”
控制器的数据传递
控制器之间的数据传递主要有2种情况:顺传和逆传
顺传
控制器的跳转方向: A -> C
数据的传递方向 : A -> C
数据的传递方式:在A的prepareForSegue:sender:方法中根据segue参数取得destinationViewController, 也就是控制器C, 直接给控制器C传递数据(要在C的viewDidLoad方法中取得数据,来赋值给界面上的UI控件)
顺传:来源控制器传递给目的控制器
1.在目的控制器定义属性
2.在来源控制器拿到目的控制器,给它传值
通过segue跳转,一般在来源控制器的prepareForSegue中传值.
逆传
控制器的跳转方向: A -> C
数据的传递方向 : C -> A
数据的传递方式:让A成为C的代理,在C中调用A的代理方法,通过代理方法的参数传递数据给