iOS UI基础-12.0 Storyboard
2015-09-21 11:53 jiangys 阅读(337) 评论(0) 编辑 收藏 举报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)
![](https://images2015.cnblogs.com/blog/292326/201509/292326-20150921111116428-2082182043.png)
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键,直接从控件拖线到目标控制器
![](https://images2015.cnblogs.com/blog/292326/201509/292326-20150921112609397-597792097.png)
![](https://images2015.cnblogs.com/blog/292326/201509/292326-20150921112629069-387388337.png)
点击“登录”按钮后,就会自动跳转到右边的控制器
手动型
1.按住Control键,从来源控制器拖线到目标控制器
![](https://images2015.cnblogs.com/blog/292326/201509/292326-20150921113114600-297517332.png)
![](https://images2015.cnblogs.com/blog/292326/201509/292326-20150921113135569-904346869.png)
2.手动型的Segue需要设置一个标识(选中箭头设置)
![](https://images2015.cnblogs.com/blog/292326/201509/292326-20150921113210772-805437176.png)
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; } }
代码跳转StoryBoard界面
//将我们的storyBoard实例化,“Main”为StoryBoard的名称 UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Me" bundle:nil]; //将第二个控制器实例化,"SecondViewController"为我们设置的控制器的ID ReceiptAddressVC *vc = [mainStoryBoard instantiateViewControllerWithIdentifier:@"ReceiptAddressVC"]; [self.navigationController pushViewController:vc animated:YES];