---恢复内容开始---

实际效果如上

一:Segue的学习

1.什么是Segue:

Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)
 
2.Segue的属性:
@property (nullable, nonatomic, copy, readonly) NSString *identifier;
//identifier属性,可以在stroyboard中修改
@property (nonatomic, readonly) __kindof UIViewController *sourceViewController;
//源控制器
@property (nonatomic, readonly) __kindof UIViewController *destinationViewController;
//目标控制器

3.Segue的类型:

根据Segue的执行(跳转)时刻,Segue可以分为2大类型
1.自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转
比如在上面的例子中:
点击“登录”按钮后,就会自动跳转到右边的控制器,但是这样不符合要求。
如果点击某个控件后,不需要做任何判断,一定要跳转到下一个界面,建议使用自动型Segue。
2.手动型:需要通过写代码手动执行Segue,才能完成界面跳转
代码如下:
- (IBAction)loginBtnClicked {
NSString *acount = self.acountField.text;
NSString *password = self.passwordField.text;
if ([acount isEqualToString:@"zhangsan"]&&[password isEqualToString:@"123"]) {
[self performSegueWithIdentifier:@"ContactsViewController" sender:nil];
}else{
NSLog(@"密码或账号不正确");
}
}
手动型的Segue需要设置一个标识(如右图)

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

[self performSegueWithIdentifier:@"login2contacts" sender:nil];

// Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用

如果点击某个控件后,需要做一些判断,也就是说:满足一定条件后才跳转到下一个界面,建议使用“手动型Segue”
4.performSegueWithIdentifier:sender:
利用performSegueWithIdentifier:方法可以执行某个Segue,完成界面跳转
 
接下来研究performSegueWithIdentifier:sender:方法的完整执行过程

[self performSegueWithIdentifier:@“login2contacts” sender:nil];

// 这个self是来源控制器

(1).根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象
设置Segue对象的sourceViewController(来源控制器)
新建并且设置Segue对象的destinationViewController(目标控制器)

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

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

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

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

---恢复内容结束---

2016-1-5第一个完整APP 私人通讯录的实现 1:登录界面及跳转的简单实现2的更多相关文章

  1. 2016-1-7第一个完整APP 私人通讯录的实现 6:在联系人界面增加删除联系人的功能

    一:在viewDidLoad方法中代码添加一个UIBarButtonItem,并将其的类型设置成垃圾桶,代码如下: - (void)viewDidLoad { [super viewDidLoad]; ...

  2. 2016-1-7第一个完整APP 私人通讯录的实现 5:保存数据

    一:登陆界面 1):用户点击登陆按钮并成功登陆后,根据此时的开关情况选择是否保存数据,代码如下: "]) { [self performSegueWithIdentifier:@" ...

  3. 2016-1-6第一个完整APP 私人通讯录的实现 4:编辑联系人

    一:建立编辑联系人的controller,并使其拥有模型contact,且有协议.代码如下 #import <UIKit/UIKit.h> #import "contact.h& ...

  4. 2016-1-6第一个完整APP 私人通讯录的实现 3:添加联系人

    一:创建模型对象:contact用于存放数据,也便于读取加载 #import <Foundation/Foundation.h> @interface contact : NSObject ...

  5. 2016-1-6第一个完整APP 私人通讯录的实现 2:增加提示用户的提示框,监听文本框

    一:在登录时弹出提示用户的提示框: 1.使用第三方框架. 2.在登陆按钮点击事件中增加如下代码: - (IBAction)loginBtnClicked { NSString *acount = se ...

  6. IOS第13天(1,私人通讯录,登陆功能,界面的跳转传值,自定义cell,编辑界面)

    ******HMLoginViewController 登陆的界面 #import "HMLoginViewController.h" #import "MBProgre ...

  7. App设计:消息推送和界面路由跳转

    概要 app消息推送.显示通知栏,点击跳转页面是很一般的功能了,下面以个推为例演示push集成,消息处理模块及app内部路由模块的简单设计. 推送 推送sdk集成 集成sdk步骤根据文档一步步做就行了 ...

  8. [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储

    A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改)   这个代码 ...

  9. iOS完整App资源收集

    前言 iOS开发学习者都希望得到实战训练,但是很多资料都是只有一小部分代码,并不能形成完成的App,笔者在此处收集了很多开源的完整的App,都有源代码哦! 本篇文章持续更新中,请持续关注.本篇所收集的 ...

随机推荐

  1. C#引用Office.word出错的解决办法-无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass” 【转】

    本文章转自 suchso 1.系统找不到 Microsoft.Office.Interop.Word" "Could not load file or assembly 'Micr ...

  2. linux下如何优雅的挂载一个外界设备(比如优盘)

    最近从事linux,实验室一个破服务器,能连上网,但是输入这样的命令:        yum -y install gcc yum -y install gcc-c++ ,居然说是没有这样的镜像,也罢 ...

  3. ARM的启动和中断向量表

    启动的方式 对于S3C2440而言,启动的方式有两种,一是Nor Flash方式启动,二是Nand Flash方式启动. 使用Nor Flash方式启动 Nor Flash的地址范围如下 0x0000 ...

  4. python中数据的变量和字符串的常用使用方法

    1.查看变量类型: a=2 print(a,type(a)) print的用法:在print后面跟多个输出,可以用逗号分隔. 回收变量名,如把a存储不同的数据,你不需要删除原有变量就可以直接赋值 2. ...

  5. 继承多态绕点 Java篇

    上一篇把C#语言的继承,多态里的特殊的情况做了一下总结,其实那一部分代码都是从Java翻译过去的,今天来总结一下Java在这种情况下是怎么调用的. 上一篇我们说的是:1.多态,只在多态系里方法调用,很 ...

  6. sublime text2 解决中文乱码

    打开Preferences菜单,并选择 Browse Packages… 系统会打开Sublime Text 2的Packages文件夹,回到上一级菜单,然后打开Installed Packages文 ...

  7. 怎么设置 mysql 多主复制

    更新 其实本文主要来自www.digitalocean.com ,但是我没有买他们家的 VPS 用来 demo 了.只是用vagrant 来模拟了. 介绍 说说关于通过两台 vps 来扩展 mysql ...

  8. FOJ 2105 Digits Count

    题意:对一串数字进行抑或某数,和某数,或某数,统计某区间和的操作. 思路:因为化成二进制就4位可以建4颗线段树,每颗代表一位二进制. and 如果该为是1  直接无视,是0则成段赋值为0: or  如 ...

  9. 二模 (7) day2

    第一题: 题目大意:多重背包. 解题过程: 1.二进制拆分.最慢的点0.5s. 2.单调队列优化会更快,不过我不会.. 第二题: 题目描述:给定一个n×m的矩阵,记录左上角为(1,1),右下角为(n, ...

  10. 仿淘宝js图片切换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...