博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS UI基础-12.0 Storyboard
阅读量:6655 次
发布时间:2019-06-25

本文共 3501 字,大约阅读时间需要 11 分钟。

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;    }}

代码跳转StoryBoard界面

//将我们的storyBoard实例化,“Main”为StoryBoard的名称        UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Me" bundle:nil];        //将第二个控制器实例化,"SecondViewController"为我们设置的控制器的ID        ReceiptAddressVC *vc = [mainStoryBoard instantiateViewControllerWithIdentifier:@"ReceiptAddressVC"];        [self.navigationController pushViewController:vc animated:YES];

 

转载地址:http://ocjto.baihongyu.com/

你可能感兴趣的文章
前段时间参加个访谈,题目……不让我修改,我是典型的穷人啊……以下是访谈稿...
查看>>
参考博客配置IIS时遇到的问题记录
查看>>
poj - 3254 - Corn Fields (状态压缩)
查看>>
纯js写图片轮播插件
查看>>
DNS
查看>>
【转载】C++ Interesting卡常数
查看>>
Jlink-10 pin 的定义(stm32使用)官方定义
查看>>
python对象--其它
查看>>
MySQL 核心参数优化
查看>>
Oracle主键及约束
查看>>
新 任 时 间 表 大 臣
查看>>
VMware View 5.0从菜鸟到高手系列 4 -虚拟桌面模板
查看>>
摄影菜鸟使用的相机镜头术语大全分享
查看>>
XenServer部署系列之06——网络配置
查看>>
Python黑科技:50行代码运用Python+OpenCV实现人脸追踪+详细教程+快速入门+图像识...
查看>>
软件测试质量和效率评价之我见
查看>>
kloxo增加了域名,怎么不能访问?如何重启web服务?
查看>>
Nginx调试入门
查看>>
Centos7安装jdk
查看>>
css的再深入8(更新中···)
查看>>