● Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)

Segue的属性

● 每一个Segue对象,都有3个属性
➢ 唯一标识
@property (nonatomic, readonly) NSString *identifier;
➢ 来源控制器
@property (nonatomic, readonly) id sourceViewController;
➢ 目标控制器
@property (nonatomic, readonly) id destinationViewController;

● 根据Segue的执行(跳转)时刻,Segue可以分为2大类型

➢ 自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转

➢ 手动型:需要通过写代码手动执行Segue,才能完成界面跳转

1. 调用sourceViewController的下面方法,做一些跳转前的准备工作并且传入创建好的 Segue对象

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:
(id)sender;

// 这个sender是当初performSegueWithIdentifier:sender:中传入的sender

2. 调用Segue对象的- (void)perform;方法开始执行界面跳转操作
➢ 取得sourceViewController所在的UINavigationController
➢ 调用UINavigationController的push方法将destinationViewController压入栈中,完成跳转

无论是手动类型的segue还是自动类型的segue, 在跳转之前都会执行prepareForSegue方法

● 在恰当的时刻,使用perform方法执行对应的Segue

// Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用 
[self performSegueWithIdentifier:@"login2contacts" sender:nil];

- (IBAction)loginOnClick:(UIButton *)sender
{
// 添加蒙版禁止用户操作, 并且提示用户正在登录
[MBProgressHUD showMessage:@"正在拼命加载ing...."]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (![self.accountField.text isEqualToString:@"lnj"]) {
// 3.登录成功后移除蒙版
[MBProgressHUD hideHUD];
[MBProgressHUD showError:@"用户名不正确!!!"];
return;
} if (![self.pwdField.text isEqualToString:@""]) {
// 3.登录成功后移除蒙版
[MBProgressHUD hideHUD];
[MBProgressHUD showError:@"密码不正确!!!"];
return;
} // 3.登录成功后移除蒙版
[MBProgressHUD hideHUD];
// 2.如果正如,跳转到联系人界面(手动执行segue)
[self performSegueWithIdentifier:@"login2contatc" sender:@"jonathan"]; });
} // 在segue跳转之前调用, 会传入performSegueWithIdentifier方法创建好的segue对象
- (void):(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"%@", sender);
NSLog(@"%@, %@ %@",segue.identifier, segue.sourceViewController, segue.destinationViewController); // 1.拿到目标控制器
UIViewController *vc = segue.destinationViewController;
// 2.设置目标控制器的标题
vc.title = [NSString stringWithFormat:@"%@ 的联系人列表", self.accountField.text]; /*
// 执行segue的perform内部实现
UIViewController *sourceVc = segue.sourceViewController;
UINavigationController *nav = sourceVc.navigationController;
[nav pushViewController:segue.destinationViewController animated:YES];
*/ }
// 无论是手动类型的segue还是自动类型的segue, 在跳转之前都会执行该方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
/*
// 取出目标控制器
NJEditViewController *editVc = (NJEditViewController *)segue.destinationViewController;
// 设置来源控制器给目标控制器的属性
editVc.vc = self;
*/ // 1.取出目标控制器
NJAddViewController *editVc = (NJAddViewController *)segue.destinationViewController;
// 2.设置代理
editVc.delegate = self;
}

最新文章

  1. 002:IPC与system函数简介
  2. Java 代码编译和执行的整个过程
  3. Nest查询示例
  4. paip.log4j兼容linux windows 路径设置
  5. NSOperation创建队列
  6. formData_html5_map标签
  7. Java编程思想学习(四) 访问权限
  8. Min Stack [LeetCode 155]
  9. js template
  10. python操作redis-为元素排序
  11. vimplugin破解
  12. 在SOUI中使用网格布局
  13. 关于IO流代码BufferedReader
  14. java类的种类
  15. word模板导出的几种方式:第一种:占位符替换模板导出(只适用于word中含有表格形式的)
  16. 输入框VS软键盘
  17. HSQL可视化工具
  18. CPU HQ 什么意思
  19. Mac zsh切换bash bash切换zsh
  20. MySQL基础之 外键参照讲解

热门文章

  1. java笔试面试题准备
  2. 基于php双引号中访问数组元素
  3. zoj3195(lca / RMQ在线)
  4. 清北刷题冲刺 11-01 p.m
  5. JS实现自动轮播图效果(js案例)
  6. CF446B DZY Loves Modification 优先队列
  7. 洛谷P3078 [USACO13MAR]扑克牌型Poker Hands
  8. Mediator模式(仲裁者设计模式)
  9. Chinese Zodiac (水题)
  10. 非局部均值去噪(NL-means)