zoukankan      html  css  js  c++  java
  • 动态加载故事storyboard

       第一种方法:


        ViewControllerB *vcB = [self.storyboard instantiateViewControllerWithIdentifier:@"Name of View Controller B"];   
        
        [vcB setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
        [viewControllerA presentModalViewController:(UIViewController *)vcB animated:YES];

    接上一篇,通过学习上一篇,我们知道,XIB文件可以动态加载视图,同样功能强大的StoryBorad,更能出色地完成这一重任。此外其加载视图的方式,有了更多的选择,颇具有灵活性。

    在storyBorad中可以结合XIB 文件使用,当然也可以动态地加载XIB 文件视图,这个与在XIB文件中动态加载是一样的,不熟悉的,可以看看我的上一篇博文。

    直接进入正题,创建一个

    勾选StoryBorad

    //创建如下图所示的界面文件,注意最后一个并没有连接Segue,我们要手动地在程序中动态地加载这个界面文件

    首先:我们先看一下XIB文件和storyborad中,一个UIViewControlelr 在其中显示的形态有什么不同,以及一些设置。

    先看XIB中

    再看StoryBorad中

    细心的人会发现,两个有一些细微的差别,刚开始学习的时候,没有注意到,或者是,注意到了,也不知道怎么使用,在storyborad中将NIB Name 替换成了Indentifier ,并且增加了一个 Initial Sence 选项,这个大家都明白.对于

    Indentifier,就是我们今天动态加载视图中的一个重要属性标识。

    好了,前期准备完毕,在storyborad中动态加载视图,用到的一个类是显而易见

    UIStoryboard Class Reference

    Getting a Storyboard Object
    + storyboardWithName:bundle: //获得特定的storyBorad
    Instantiating Storyboard View Controllers
    – instantiateInitialViewController //返回初始化场景的controller
    – instantiateViewControllerWithIdentifier: //返回指定的controller

    相信这回大家该恍然大悟了,我们使用– instantiateViewControllerWithIdentifier:就可以获得我们想要的任何UIViewController ,从而可以动态地加载。要注意在那个Indentifier选项中要标记好名字。

    //简单演示一下,抛砖引玉吧,

    - (IBAction)shoudong:(id)sender {
        
        NSLog(@"function %s line=%d",__FUNCTION__,__LINE__);
        UIViewController *con=[[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"dongtai"]; //获得控制器
        
        [self.navigationController pushViewController:con animated:YES]; // 加载控制器
        
        
    }

    点击动态加载按钮,看正确显示我们的下一个视图,这里只是demo ,实际可以根据需要在特定场景加载特定的视图,十分灵活,功能也十分强大。



    总结:通过使用Interface Builder动态地加载视图,更加熟悉了IB的使用,加深了印象,同时也提高了程序处理的灵活性。为以后探索更加高级的应用打下了基础。不断研究,不断总结,就会更快地进步。如有问题,欢迎留言交流。

    写在后面:此时动态加载视图,注意和连线push的区别,使用过storyBorad的一看就会看出区别的。对比较,多分析。

    IStoryboard *storyBoard=[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];

    DetailViewController

    detailViewController *

     = [storyBoard instantiateViewControllerWithIdentifier:@"DetailViewController"];

    这样就好了

  • 相关阅读:
    总结@ 在C# 中的用法
    如何在多线程中调用winform窗体控件
    jQuery对象和DOM对象原来不一样啊
    以编程方式使用 Word 中的内置对话框
    C#中Application.DoEvents()的作用
    本地设置正常,放服务器上就报 System.Security系统找不到指定的文件解决方法
    复制选中的listbox内容
    将一列数据拼接成一个字符串
    服务器不能复制粘贴问题处理
    获取Token不完整问题
  • 原文地址:https://www.cnblogs.com/lgphp/p/4082762.html
Copyright © 2011-2022 走看看