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里 ...
随机推荐
- Python-OpenCV中的图像轮廓检测
目录 cv2.findContours() 主要记录Python-OpenCV中的cv2.findContours()方法:官方文档: cv2.findContours() 在二值图像中寻找图 ...
- java排序算法(持续更新)
package exception; import java.util.Arrays; public class Sort { public static void main(String[] arg ...
- 洛谷P3138 [USACO16FEB]负载平衡Load Balancing_Silver
P3138 [USACO16FEB]负载平衡Load Balancing_Silver 题目描述 Farmer John's NN cows are each standing at distinct ...
- react native 安卓生产包无法获取线上数据
android:usesCleartextTraffic="true"
- ldap第一天 编译安装LDAP + ldapadmin
此文整理学习此大神的博客:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26168435&id=5746284 一.环 ...
- css奇技淫巧—box-shadow与outline绘制多重边框效果
css语法: box-shadow: h-shadow v-shadow blur spread color inset; 注释:box-shadow 向框添加一个或多个阴影.该属性是由逗号分隔的阴影 ...
- POJ1009 Edge Detection
题目来源:http://poj.org/problem?id=1009 题目大意: 某图像公司用run length encoding(RLE)的方式记录和存储了大量的图像.程序的目标是读入压缩后的图 ...
- Angular2.0的学习(五)
第五节课: 1.组件的输入输出属性 2.使用中间人模式传递数据 3.组件生命周期以及Angular的变化发现机制
- ResourceBundle 读取properties文件中文乱码
1.确认properties文件是什么编码格式,并确认文件在该格式下中文是正常显示的2.读取时候,进行转一层,先用ISO-8859-1读取字节流,然后根据properties的文件格式进行new St ...
- mask
select ) as cnt from ( ' as flag union all select 'a' as flag union all select null as flag ) t0 ; s ...