当返回上一个界面且须要上一个界面作某事时,用unwind segue实现起来比delegate简单许多,甚至有时不适合用delegate来实现,那么咱们就用unwind segue吧,并且像1->2->3这样的跳转,3视图能够经过unwind segue方便的返回到一、2任意界面。下面跟着我一块儿作吧。git
个人一、二、3界面分别对应ViewController一、ViewController二、ViewController3github
(1)打开须要返回到的界面ViewController1.m,加上下面方法,返回类型必定是IBAction,参数类型必定是UIStoryboardSegue,名称随便(这个方法必定要加,返回时调用的)ide
//其余界面返回到此界面调用的方法
- (IBAction)ViewController1UnwindSegue:(UIStoryboardSegue *)unwindSegue { }
(2)右键2界面上方的Exit(下图中画绿圈的)弹出菜单中能够看到刚才在1界面中加的那个方法的名称(下图中红色圈里),而后以下图同样连线,弹出菜单选择manualspa
(3)给2视图的unwind segue取一个名字叫from2to1以下图,等会会用到。code
(4)同理从3视图返回到1视图,也是右键3界面上方的Exit弹出菜单中能够看到刚才在1界面中加的那个方法的名称,而后连线,弹出菜单选择manual,给3视图的unwind segue取一个名字叫from3to1 (5)咱们给2视图和3视图中的“2退至1”、“3退至1”的按钮加上事件代码,这里就用到了给unwind segue取的名字(也就是identifier)orm
- (IBAction)back:(id)sender {
//执行segue跳页的方法 [self performSegueWithIdentifier:@"from2to1" sender:nil]; }
- (IBAction)back:(id)sender {
//执行segue跳页的方法
[self performSegueWithIdentifier:@"from3to1" sender:nil];
}
(6)再打开ViewController1.m,找到刚才加的那个方法,往里面加一些代码,能够根据unwindSegue.identifier判断从哪一个界面退回到1的blog
//其余界面返回到此界面调用的方法
- (IBAction)ViewController1UnwindSegue:(UIStoryboardSegue *)unwindSegue { if ([unwindSegue.identifier isEqualToString:@"from2to1"]) { _lbShowMessage.text = @"从2退到1"; } else if ([unwindSegue.identifier isEqualToString:@"from3to1"]) { _lbShowMessage.text = @"从3退到1"; } }
好了,运行一下,达到了咱们要的效果。事件
返回按钮事件甚至能够一行代码都不用写,下面演示从3返回到2it
(1)打开须要返回到的界面ViewController2.m,加上下面方法,返回类型必定是IBAction,参数类型必定是UIStoryboardSegue,名称随便io
//其余界面返回到此界面调用的方法
- (IBAction)ViewController2UnwindSegue:(UIStoryboardSegue *)unwindSegue { if ([unwindSegue.identifier isEqualToString:@"from3to2"]) { _lbShowMessage.text = @"从3退到2"; } }
(2)右键3界面上方的Exit弹出菜单以下图,由于是返回到2,因此选择2界面的那个方法而后连线,此次是连到button,这样button事件就不用代码写了,给unwind segue取一个名字叫from3to2
(3)我如今不给“3退至2”这个按钮加事件代码,就能够点击它返回到2了,运行一下试试。
结束:附上demo连接https://github.com/zhanglinfeng/ZLFSegueDemo