● 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对象

  1. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:
  2. (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];

  1. - (IBAction)loginOnClick:(UIButton *)sender
  2. {
  3. // 添加蒙版禁止用户操作, 并且提示用户正在登录
  4. [MBProgressHUD showMessage:@"正在拼命加载ing...."];
  5.  
  6. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  7. if (![self.accountField.text isEqualToString:@"lnj"]) {
  8. // 3.登录成功后移除蒙版
  9. [MBProgressHUD hideHUD];
  10. [MBProgressHUD showError:@"用户名不正确!!!"];
  11. return;
  12. }
  13.  
  14. if (![self.pwdField.text isEqualToString:@""]) {
  15. // 3.登录成功后移除蒙版
  16. [MBProgressHUD hideHUD];
  17. [MBProgressHUD showError:@"密码不正确!!!"];
  18. return;
  19. }
  20.  
  21. // 3.登录成功后移除蒙版
  22. [MBProgressHUD hideHUD];
  23. // 2.如果正如,跳转到联系人界面(手动执行segue)
  24. [self performSegueWithIdentifier:@"login2contatc" sender:@"jonathan"];
  25.  
  26. });
  27. }
  28.  
  29. // 在segue跳转之前调用, 会传入performSegueWithIdentifier方法创建好的segue对象
  30. - (void):(UIStoryboardSegue *)segue sender:(id)sender
  31. {
  32. NSLog(@"%@", sender);
  33. NSLog(@"%@, %@ %@",segue.identifier, segue.sourceViewController, segue.destinationViewController);
  34.  
  35. // 1.拿到目标控制器
  36. UIViewController *vc = segue.destinationViewController;
  37. // 2.设置目标控制器的标题
  38. vc.title = [NSString stringWithFormat:@"%@ 的联系人列表", self.accountField.text];
  39.  
  40. /*
  41. // 执行segue的perform内部实现
  42. UIViewController *sourceVc = segue.sourceViewController;
  43. UINavigationController *nav = sourceVc.navigationController;
  44. [nav pushViewController:segue.destinationViewController animated:YES];
  45. */
  46.  
  47. }
  1. // 无论是手动类型的segue还是自动类型的segue, 在跳转之前都会执行该方法
  2. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  3. {
  4. /*
  5. // 取出目标控制器
  6. NJEditViewController *editVc = (NJEditViewController *)segue.destinationViewController;
  7. // 设置来源控制器给目标控制器的属性
  8. editVc.vc = self;
  9. */
  10.  
  11. // 1.取出目标控制器
  12. NJAddViewController *editVc = (NJAddViewController *)segue.destinationViewController;
  13. // 2.设置代理
  14. editVc.delegate = self;
  15. }

IOS segue(跳转页面处理)的更多相关文章

  1. iOS segue 跳转

    场景描述: 要实现在tableViewController 的界面A里,点击一个cell ,跳转到第二个viewController的界面B .在第二个界面里做相应操作. 我的做法,利用sb,在A 里 ...

  2. 设置segue跳转页面

    第二种是利用ViewController与ViewController之间,拖拽添加segue 方法中提到的设置segue的identifier界面 在.h文件中声明 - (IBAction)goto ...

  3. xamarin.ios 跳转页面

    一:用Segue跳转页面 按住Ctrl连线,选择show,后台覆写 ShouldPerformSegue方法,返回True跳转,False取消跳转.   二:通过代码跳转至StoryBoard页面 U ...

  4. ios基础之 透过页面跳转来认识 Strong 与 Weak

    最近在自己做一个小程序,遇到了页面跳转的问题,然后上网一通乱搜,跳转的问题解决了,又有传值的问题.上面两个问题解决了,又发现内存比刚开始时多占用了2M,于是,各种内心纠结,想彻底 搞清楚strong ...

  5. ios学习-delegate、传值、跳转页面

    ios学习-delegate.传值.跳转页面     1.打开xcode,然后选择ios--Application--Empty Application一个空项目. 项目目录: 2.输入项目名称以及选 ...

  6. iOS 极光推送 如何点击推送消息跳转页面

    假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧. 根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情 ...

  7. iOS极光推送 点击推送消息跳转页面

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  8. iOS推送后页面跳转

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  9. iOS UItextView监听输入特定字符跳转页面选择选项返回

    今天有朋友问我一个需求的实现,于是自己写了一个Demo简单的实现了一下: 需求是: 1>比如: 检测用户输入"A"字符串,跳转页面选择选项,将选择的选项放置textView里 ...

随机推荐

  1. IIS中使用子目录文件作为默认文档(Default Document)替代重定向

    以前一直以为IIS应用程序的默认文档只能设置根目录下的文件,像index.html,default.aspx等,后来经同事指点,原来子目录或者子应用程序下的文件也可以添加到根应用程序的默认文档列表中. ...

  2. [poj 1276] Cash Machine 多重背包及优化

    Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver ap ...

  3. Hadoop eclipse plugin

    我的eclipse是在win7上,hadoop在win7里的虚拟机里的ubuntu上,为了方便起见,想在eclipse上安装hadoop的插件,主要参考 https://my.oschina.net/ ...

  4. UVA - 12563 Jin Ge Jin Qu hao (01背包)

    InputThe first line contains the number of test cases T (T ≤ 100). Each test case begins with two po ...

  5. Git 撤销中间某次的提交记录

    今天遇到一个问题,一周前一位同事把非发布代码合并到发布分支上并已发布线上,在这个提交点后已经有了很多次的提交记录,所以不能直接回滚,使用到了gIt提供的revert.以此记录. git revert ...

  6. git分支主干

    ~/Desktop/work/movies/movie(apps) $ git status  //先查看是否有需要提交的东西# On branch appsnothing to commit (wo ...

  7. IE浏览器不支持Promise对象

    1. 安装babel-polyfill插件转换 npm install --save-dev babel-polyfill 2. 在webpack中引入babel-polyfill 在webpack. ...

  8. Windows 新增 Sublime Text3 右键快捷方式

    Win10 创建 Sublime Text 3 右键快捷方式 Windows + R 输入 regedit 打开注册表编辑器: 依次找到 计算机\HKEY_CLASSES_ROOT\*\shell: ...

  9. Luogu P4551 最长异或路径 01trie

    做一个树上前缀异或和,然后把前缀和插到$01trie$里,然后再对每一个前缀异或和整个查一遍,在树上从高位向低位贪心,按位优先选择不同的,就能贪出最大的答案. #include<cstdio&g ...

  10. Luogu P4478 [BJWC2018]上学路线 卢卡斯+组合+CRT

    首先,从$(0,0)$走到$(n,m)$的方案数是$ C_{n+m}^n$,可以把走的方向看作一种序列,这个序列长$ n+m$ ,你需要从中任取$n$个位置,让他向右走: 然后就是如何处理不能走的点: ...