iOS UI基础-12.0 Storyboard

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];
原文地址:https://www.cnblogs.com/jys509/p/4825581.html