zoukankan      html  css  js  c++  java
  • iOS开发-UI (十二)StoryBoard

    今天这篇是UI的最后一篇了,后面再整理网络篇

    知识点

    1.UIStoryBoard介绍

    2. UIStoryBoard的界面跳转

    3. UIStoryBoard界面之间的传值

    =========================      

    UIStoryBoard介绍      

        UIStoryBoard是你可以用来定义用户界面的一种新的方式,像xib。与xib不同的是它可以同时管理多个ViewController,而且可以在UIStoryBoard中配置ViewController 之间的跳转关系。 如果主窗口只有一个view controller是作为UIStoryBoard的第一个界面,就需要勾选上 Initial Scene。UIStoryBoard将原有工程中的所有xib文件集成在一起,用拖拽的方式建立起两个viewController之间的跳转关系,使得整个程序的UI跳转逻辑清楚明了。使用UIStoryBoard后,界面相关的代码编写将更少。

    1.如果主窗口只有一个view controller是作为story board的第一个界面,就需要勾选上 Initial Scene。

    选中is initial view controller 当前的scene成为进入应用第一个scene

     

    2.在UIStoryBoard当中可以直接在UITableView上定制cell

     

    ========================= 

    UIStoryBoard的界面跳转 

    3.注意push和present的区别

      1).push对应pop,present对应dismiss;

      2).present只能逐级返回,push所有视图由视图栈控制,可以返回上一级,也可以返回到根vc,其他vc。

      3).present一般用于不同业务界面的切换,push一般用于同一业务不同界面之间的切换。

    4.如何跳转到未连线的控制器

    1)+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil;

    作用:获取某个对应的UIStoryboard对象

    2)- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier

    作用:获取该UIStoryboard的文件中的某个带有identifier标识的控制器 //跳转到未连接的控制器

        

    //取得Main.StoryBoard
    
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    
    //通过StoryBoardID获得对应的控制器对象
    
    UIViewController *ctl = [storyBoard instantiateViewControllerWithIdentifier:@"ctlC"];
    
    //代码跳转
    [self.navigationController pushViewController:ctl animated:YES];

    6.如何回到前一个界面

    在上一级视图控制器当中实现一个方法,要满足一下格式

    -(IBAction)+任意方法名+(UIStoryboardSegue *)+任意变量名

    //UIStoryBoard的连线回跳方法
    
    -(IBAction)unwindingSegue:(UIStoryboardSegue *)segue{
    
    NSLog(@"sourceViewController = %@ destinationViewController = %@",segue.sourceViewController,segue.destinationViewController);
    
    //作用:在反向传值当中会应用到

    ========================= 

     UIStoryBoard界面之间的传值

    1.正向传值

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    作用:即将切换场景时候调用

    //当切换界面(push,present)的时候,就会调用以下方法
    
    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    
    
        //正向传值
    
        if ([segue.identifier isEqualToString:@"login"]) {
    
            LoginViewController *ctl = segue.destinationViewController;
    
            //赋值
    
            ctl.userNameStr = self.userNameTF.text;
    
            ctl.passwordStr = self.passWordTF.text;
    
        }

    2.反向传值(传统的block,协议代理,通知中心,单例传值依然奏效)

    -(IBAction)unwind:(UIStoryboardSegue *)segue

    作用:返回上一个场景时候调用

    //UIStoryBoard的连线回跳方法
    
    //先实现回跳方法,才能连线
    
    -(IBAction)unwindingSegue:(UIStoryboardSegue *)segue{
        //反向传值(UIStoryBoard专用)
        //判断是否点击的是注册完成
    
        if ([segue.identifier isEqualToString:@"finish"]) {
            //严谨
    
            if ([segue.sourceViewController isKindOfClass:[RegisterViewController class]]) {
    
                RegisterViewController *ctl = segue.sourceViewController;
    
            //刷新UI
    
                self.userNameTF.text = ctl.userNameTF.text;
    
                self.passWordTF.text = ctl.passWordTF.text;
    
    //作用:在反向传值当中会应用到
            }
        }
  • 相关阅读:
    快速入门系列--MVC--07与HTML5移动开发的结合
    快速入门系列--WebAPI--01基础
    快速入门系列--CLR--02多线程
    MongoDB快速入门
    ubuntu 12.04 server编译安装nginx
    apache 正反向代理
    c# 继承,多态,new /overrid 区别, 引用父类的方法
    python 异步线程简单实现
    ubuntu上完全卸载package
    apache2:Invalid option to WSGI daemon process definition
  • 原文地址:https://www.cnblogs.com/fcug/p/6399560.html
Copyright © 2011-2022 走看看