● 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;
}

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. 如何给自己的开源项目选择和添加 License

    License 的作用:开源 == 为所欲为? 开源并不等于为所欲为! 代码的用途,修改之后的代码有什么要求,开源程序对于原作者的权利和责任等等,都是需要明确的. 开源协议 License 就是这么一 ...

  2. 消耗战——dp+虚树

    题目 [题目描述] 在一场战争中,战场由 $n$ 个岛屿和 $n-1$ 个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为 $1$ 的岛屿,而且他们已经没有足够多 ...

  3. 数组API(2)

    ES5中数组新增API: 1. indexOf 作用:检测当前数据是否在数组中存在: 特点:如果存在返回相对应的下标,如果不存在则返回-1: 如果数组中存在多个需要判断的这个数据,则返回最近的这个数据 ...

  4. 解读人:闫克强,Metabolic and gut microbial characterization of obesity-prone mice under high-fat diet(高脂饮食下易胖倾向小鼠的代谢和肠道微生物菌群特征分析)

    单位: 上海中医药大学 蚌埠医学院 上海交通大学附属第六人民医院 夏威夷大学癌症中心 第二军医大学 技术:非靶向代谢组学,16S rRNA测序技术 一. 概述: 本研究对小鼠进行高脂饮食,根据体重增长 ...

  5. Click: 命令行工具神器

    Click是一个Python用来快速实现命令行应用程序的包,主要优势表现在以下三点: 任意嵌套命令 自动生成帮助页 自动运行时lazy加载子命令 示例程序: import click @click.c ...

  6. 关于递归函数返回值为null的问题

    public function gettopcateid($cate_id){ $pid=db('cate')->where('cate_id',$cate_id)->find(); if ...

  7. web安全深度剖析pdf

    Web安全深度剖析.pdf_免费高速下载|百度网盘-分享无限制 链接:https://pan.baidu.com/s/1kVwP7SF

  8. Luogu P4159 [SCOI2009]迷路 矩阵快速幂+精巧转化

    大致就是矩阵快速幂吧.. 这个时候会发现这些边权$\le 9$,然后瞬间想到上回一道题:是不是可以建一堆转移矩阵再建一个$lcm(1,2,3,4,5,6,7,8,9)$的矩阵?...后来发现十分的慢q ...

  9. Linux定时清理30天前的Tomcat日志脚本

    一.在tomcat的log路径下新建.sh脚本文件clean.sh,内容如下:#!/bin/bashlogs_path="/mnt/tomcat/apache-tomcat-8.5.23/l ...

  10. spring boot test MockBean

    使用spring boot , MockBean @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) p ...