zoukankan      html  css  js  c++  java
  • 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];
  • 相关阅读:
    vim的modeline
    python的read() 、readline()、readlines()、xreadlines()
    hashset
    java泛型
    eclipse常用快捷键
    互联网计费模式
    cocos2d::CCFileUtils::sharedFileUtils()->getFileData(szFile, "r", &bufferSize) 不同平台返回值不一样
    CSS为英文和中文字体分别设置不同的字体
    fatal error C1010: 在查找预编译头时遇到意外的文件结尾
    JavaScript权威指南第03章 类型、值和变量(1)
  • 原文地址:https://www.cnblogs.com/jys509/p/4825581.html
Copyright © 2011-2022 走看看