● 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. Docker:容器与主机时间不同步问题解决

    在Docker容器运行后,可能会发现容器时间与宿主机时间不一致,一般会差8个小时.这样会造成在容器中运行的web程序打出的日志时间与实际时间不一致,如果web程序中有定时任务也会造成影响等,需要对宿主 ...

  2. 萌新在线模板--keyboarder_zsq

    好像马上就要出去打铁了QAQ,所以是不是要做个模板带过去也玩一玩? 那就做吧... 标题就设为萌新模板吧...各种萌新讲解对吧.... 图论 拓扑排序 最短路 最小生成树 二分匹配 强连通Tarjan ...

  3. Ocelot(三)- 服务发现

    Ocelot(三)- 服务发现 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10907856.html 源码地址:https ...

  4. Spring基本原理模拟(IoC部分)

    package ioc; import java.io.File; import java.lang.reflect.Method; import java.util.Collections; imp ...

  5. c# 衍生类和基类的构造顺序

    public class MyDeriveClass :MyBaseClass { public MyDeriveClass() :base() { } int derive_int = 1; } p ...

  6. 利用CSS制作脸书

    很多网站都支持图片上的头像框识别,鼠标在头像框处,会提示一些人物信息. 这次就利用CSS实现这样一个功能: div处主要包括两部分,一部分是图片:另一部分是链接以及脸框 <div class=& ...

  7. Jmeter-线程时间

    随手记录下自己在学习遇到的线程时间问题 1.线程数14个,要求每秒进入2个线程,这设置准备时长因为7秒       及准备时长 = 线程数/每秒需要进入的线程数量      如上列中:准备时间 = 1 ...

  8. mysql update select 从查询结果中更新数据

    UPDATE user_online_month_atu a INNER JOIN ( SELECT user_id, sum(c.online_times) as online_times, SUM ...

  9. python实现王者荣耀英图片收集

    一个python写的小爬虫项目,爬虫相关的很容易写,关键是怎么找到爬取图片的位置. 图片位置分析 hero_list_url = 'http://pvp.qq.com/web201605/js/her ...

  10. saltstack执行结果存储到MySQL

    saltstack执行结果保存到MySQL中,以便进行命令安全审计必须是python2.7以上的环境安装相关模块ubuntu系统安装 apt-get install -y python-mysqldb ...