您的位置:首页 > 产品设计 > UI/UE

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: