IOS segue(跳转页面处理)
● 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(跳转页面处理)的更多相关文章
- iOS segue 跳转
场景描述: 要实现在tableViewController 的界面A里,点击一个cell ,跳转到第二个viewController的界面B .在第二个界面里做相应操作. 我的做法,利用sb,在A 里 ...
- 设置segue跳转页面
第二种是利用ViewController与ViewController之间,拖拽添加segue 方法中提到的设置segue的identifier界面 在.h文件中声明 - (IBAction)goto ...
- xamarin.ios 跳转页面
一:用Segue跳转页面 按住Ctrl连线,选择show,后台覆写 ShouldPerformSegue方法,返回True跳转,False取消跳转. 二:通过代码跳转至StoryBoard页面 U ...
- ios基础之 透过页面跳转来认识 Strong 与 Weak
最近在自己做一个小程序,遇到了页面跳转的问题,然后上网一通乱搜,跳转的问题解决了,又有传值的问题.上面两个问题解决了,又发现内存比刚开始时多占用了2M,于是,各种内心纠结,想彻底 搞清楚strong ...
- ios学习-delegate、传值、跳转页面
ios学习-delegate.传值.跳转页面 1.打开xcode,然后选择ios--Application--Empty Application一个空项目. 项目目录: 2.输入项目名称以及选 ...
- iOS 极光推送 如何点击推送消息跳转页面
假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧. 根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情 ...
- iOS极光推送 点击推送消息跳转页面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- iOS推送后页面跳转
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- iOS UItextView监听输入特定字符跳转页面选择选项返回
今天有朋友问我一个需求的实现,于是自己写了一个Demo简单的实现了一下: 需求是: 1>比如: 检测用户输入"A"字符串,跳转页面选择选项,将选择的选项放置textView里 ...
随机推荐
- Ansible Playbooks高级使用
文件操作 文件创建 file 用于设置文件/链接/目录的属性,或者删除文件/链接/目录 ### state如果是directory当目录不存在时会自动创建:如果是file当文件不存在时不会自动创建 - ...
- 为什么要使用func.call(this)
1.为什么要使用func.call(this) 在正常模式下,js 函数里那些你没有声明就使用的变量,其实是访问的全局对象的属性.但是在严格模式下,不允许这种语法,所有变量都必须要显示声明,所以如果你 ...
- 基于Canvas 实现图片转点阵图
要实现什么 同事想做一张世界地图的背景图,但是网上找的图片都太low了.他想用那种密集的点阵组成的世界地图.作为程序员,想法当然是通过图片处理,识别像素点,然后生成新的图片. 目标是这样的: 实现思路 ...
- 老男孩Day1作业(二):三级菜单
作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 1)编写思路 编 ...
- Maven项目聚合 jar包锁定 依赖传递 私服
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- emmet中的用法
CSS Abbreviations Link VALUES LINK Emmet is about more than just HTML elements. You can inject value ...
- NetworkUtils
import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Lo ...
- Selenium----Selenium简单介绍以及Selenium IDE环境搭建,脚本录制
1.selenium简单介绍 心得:作为一个新手开始了解这个工具,打算从录制脚本开始学习,“录制,看,学习,写”,总结网友说得打算先使用Selenium IDE录制学习,再使用Selenium RC开 ...
- Unity PlayerPrefs
对于游戏存档,储存最高分,排行榜都需要用到储存,现在存储的方式有很多,可以存本地的Json,XML,Sqlite,还有一种就是unity自带的一种存储PlayerPrefs. 那么这个PlayerPr ...
- Java面向对象_抽象类、接口
一.抽象类 概 念:很多具有相同特征和行为的对象可以抽象为一个类:很多具有相同特征和行为的类可以抽象为一个抽象类 关键字:abstract 规 则:1.抽象类可以没有抽象方法,有抽象方法的类必 ...