• (九十)使用多个storyboard+代码实现控制器的分开管理


    使用单个storyboard会使得项目难与管理,使用纯代码又会过于麻烦。因此假设能将二者结合起来,而且使用多个storyboard。会使得项目简单简单、方便很多。

    以下以一个简单的视图关系为例,介绍多个storyboard的使用方法。

    ①有page1和page2两个页面,点击page1的Detailbutton会弹出page1Detail视图。点击page1Detail的返回button又会返回。

    ②page1和page2通过tabbar切换。

    我们创建page1、page2、page1Detail三个storyboard,每一个有自己的控制器,注意设置每一个控制器为initial ViewController。否则在载入storyboard的控制器时会崩溃

    【详细步骤】

    ①删除project设置中Main Interface的默认设置,由于要用tabbar连接两个控制器,应当通过代码实现。

    ②在AppDelegate中创建window,创建tabbar,把window的rootViewController设置为tabbar。

    载入storyboard。从storyboard拿到默认控制器,然后设置tabbar的viewControllers为page1、page2。最后不要忘了调用window的makeKeyAndVisible方法。


    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        
        self.window.backgroundColor = [UIColor whiteColor];
        
        UITabBarController *tb = [[UITabBarController alloc] init];
        
        // 载入storyboard
        UIStoryboard *page1Sb = [UIStoryboard storyboardWithName:@"page1" bundle:nil];
        UIStoryboard *page2Sb = [UIStoryboard storyboardWithName:@"page2" bundle:nil];
        // 创建并加入到tabbar
        tb.viewControllers = @[page1Sb.instantiateInitialViewController,page2Sb.instantiateInitialViewController];
        
        self.window.rootViewController = tb;
        
        [self.window makeKeyAndVisible];
        
        return YES;
    }
    

    通过这样设置,就可实现tabbar包着page1、page2两个控制器。


    ③在page1中点击Detailbutton时modal一个detail控制器,相同是通过载入storyboard、获取默认控制器、调用presentViewController:::方法modal这个控制器。

    - (IBAction)detailClick:(id)sender {
        
        // 载入storyboard
        UIStoryboard *detailSb = [UIStoryboard storyboardWithName:@"page1Detail" bundle:nil];
        // 创建控制器
        UIViewController *vc = detailSb.instantiateInitialViewController;
        [self presentViewController:vc animated:YES completion:nil];
        
    }

    ④modal的控制器的返回通过dismiss实现。

    - (IBAction)backClick:(id)sender {
        
        [self dismissViewControllerAnimated:YES completion:nil];
        
    }

  • 相关阅读:
    B树和B+树的插入、删除图文详解
    使用limit分页查询时,做delete操作,会导致丢失数据
    【转载】研发应该懂的binlog知识(下)
    【转载】研发应该懂的binlog知识(上)
    OOM排除与JVM调优
    Intellij IDEA集成JProfiler性能分析神器
    Java程序内存分析:使用mat工具分析内存占用
    mysql 查询结果为空时值时执行后面的sql语句
    mysql 无数据插入,有数据更新
    C# 超大数据量导入 SqlBulkCopy
  • 原文地址:https://www.cnblogs.com/llguanli/p/7043441.html
Copyright © 2020-2023  润新知