iOS UI基础-12.0 Storyboard
2015-09-21 11:53
447 查看
storyboard创建控制器
1.先加载storyboard文件(Test是storyboard的文件名)UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
2.接着初始化storyboard中的控制器
初始化“初始控制器”(箭头所指的控制器)
MJViewController *mj = [storyboard instantiateInitialViewController];
通过一个标识初始化对应的控制器
MJViewController *mj = [storyboard instantiateViewControllerWithIdentifier:@”mj"];
完整方式:
UIStoryboard *story=[UIStoryboard storyboardWithName:@"NJWisdomCard" bundle:nil]; NJWisdomCardDetailViewController *wisdom=[story instantiateViewControllerWithIdentifier:@"NJWisdomCardDetailViewController"]; wisdom.bindaliascode=cardId; wisdom.hidesBottomBarWhenPushed=YES; [self.navigationController pushViewController:wisdom animated:YES];
Segue
什么是Segue
Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)Segue的属性
每一个Segue对象,都有3个属性1.唯一标识
@property (nonatomic, readonly) NSString *identifier;
2.来源控制器
@property (nonatomic, readonly) id sourceViewController;
3.目标控制器
@property (nonatomic, readonly) id destinationViewController;
Segue的类型
根据Segue的执行(跳转)时刻,Segue可以分为2大类型自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转
手动型:需要通过写代码手动执行Segue,才能完成界面跳转
自动型
按住Control键,直接从控件拖线到目标控制器
点击“登录”按钮后,就会自动跳转到右边的控制器
手动型
1.按住Control键,从来源控制器拖线到目标控制器
2.手动型的Segue需要设置一个标识(选中箭头设置)
3.在恰当的时刻,使用perform方法执行对应的Segue
[self performSegueWithIdentifier:@"login2contacts" sender:nil];
使用建议
点击某个控件后,不需要做任何判断,一定要跳转到下一个界面,建议使用“自动型Segue”
点击某个控件后,需要做一些判断,也就是说:满足一定条件后才跳转到下一个界面,建议使用“手动型Segue”
使用例子
点击登陆,判断后跳转(手动型)/** * 登录 */ - (IBAction)login { if (![self.accountField.text isEqualToString:@"mj"]) { // 帐号不存在 [MBProgressHUD showError:@"帐号不存在"]; return; } if (![self.pwdField.text isEqualToString:@"123"]) { // 密码错误 [MBProgressHUD showError:@"密码错误"]; return; } // 显示一个蒙版(遮盖) [MBProgressHUD showMessage:@"哥正在帮你登录中...."]; // 发送网络请求 // 模拟(1秒后执行跳转) dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 移除遮盖 [MBProgressHUD hideHUD]; // 跳转 -- 执行login2contacts这个segue [self performSegueWithIdentifier:@"login2contacts" sender:nil]; }); } /** * 执行segue后,跳转之前会调用这个方法 * 一般在这里给下一个控制器传递数据 */ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // 1.取得目标控制器(联系人列表控制器) UIViewController *contactVc = segue.destinationViewController; // 2.设置标题 contactVc.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text]; } @end
多个控制器跳转(自动)
/** * 执行跳转之前会调用 * 在这个方法中,目标控制器的view还没有被创建 */ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { id vc = segue.destinationViewController; if ([vc isKindOfClass:[MJAddViewController class]]) { // 如果是跳转到添加联系人的控制器 // 设置下一个控制器(添加联系人的控制器)的代理 MJAddViewController *addVc = vc; addVc.delegate = self; } else if ([vc isKindOfClass:[MJEditViewController class]]) { // 如果是跳转到查看(编辑)联系人的控制器 MJEditViewController *editVc = vc; // 取得选中的那行 NSIndexPath *path = [self.tableView indexPathForSelectedRow]; editVc.contact = self.contacts[path.row]; editVc.delegate = self; } }
相关文章推荐
- UIButton 左对齐 省略号最右边
- 【leetcode】 225. Implement Stack using Queues
- UiAutomator Demos
- 使UItableViewCell 变为可删除状态
- js中退出语句break,continue和return(语句详解)
- iOS中UITextField输入判断小数点后两位
- 海量时间序列数据的实时查询系统(Druid系统)概述
- PAT 1101. Quick Sort (25)
- mySQL中删除unique key的语法 (删除某个字段的唯一性)
- 自定义UISlider的样式和滑块
- 关于execute、executeUpdate、executeQuery三者返回值的区别
- UIPageViewController
- iOS开发学习之无限滚动UICollectionView和BUG解决措施
- Druid:一个用于大数据实时处理的开源分布式系统
- UILabel小结
- iOS UI基础-11.0 UINavigationController
- iOS 【UIKit-关于userInteractionEnabled的属性的理解】
- BuildTask & BuildType
- JAVA基础学习day13--String、StringBuilder与StringBuffer与包装类
- HUE3.9 Tarball安装