美文网首页
UI进阶7 控制器的创建

UI进阶7 控制器的创建

作者: SoManyDumb | 来源:发表于2016-08-13 17:57 被阅读3次

    如何创建一个控制器

    • 控制器常见的创建方式有以下几种
      • 通过storyboard创建

      • 直接创建

    ViewController *vc = [[ViewController alloc] init];
    
    • 指定xib文件来创建
    ViewController *vc = [[ViewController alloc] initWithNibName:@"MJViewController" bundle:nil];
    

    通过storyboard创建控制器

    • 先加载storyboard文件(Test是storyboard的文件名)
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
    
    • 接着初始化storyboard中的控制器
      • 初始化“初始控制器”(箭头所指的控制器)
    ViewController *vc = [storyboard instantiateInitialViewController];
    
    • 通过一个标识初始化对应的控制器
    ViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@”vc"];
    

    控制器view的延迟加载

    • 控制器的view是延迟加载的:用到时再加载

    • 可以用isViewLoaded方法判断一个UIViewController的view是否已经被加载

    • 控制器的view加载完毕就会调用viewDidLoad方法

    多控制器

    • 一个iOS的app很少只由一个控制器组成,除非这个app极其简单

    • 当app中有多个控制器的时候,我们就需要对这些控制器进行管理

    • 有多个view时,可以用一个大的view去管理1个或者多个小view

    • 控制器也是如此,用1个控制器去管理其他多个控制器

    • 比如,用一个控制器A去管理3个控制器B、C、D

      • 控制器A被称为控制器B、C、D的“父控制器”
      • 控制器B、C、D的被称为控制器A的“子控制器”
    • 为了便于管理控制器,iOS提供了2个比较特殊的控制器

      • UINavigationController
      • UITabBarController

    UINavigationController

    • 利用UINavigationController,可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是系统自带的“设置”应用

    UINavigationController的简单使用

    • UINavigationController的使用步骤
      • 初始化UINavigationController
      • 设置UIWindow的rootViewController为UINavigationController
      • 根据具体情况,通过push方法添加对应个数的子控制器

    UINavigationController的子控制器

    • UINavigationController以栈的形式保存子控制器
    @property(nonatomic,copy) NSArray *viewControllers;
    @property(nonatomic,readonly) NSArray *childViewControllers;
    
    • 使用push方法能将某个控制器压入栈
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
    
      - 使用pop方法可以移除控制器
        - 将栈顶的控制器移除
    
    - (UIViewController *)popViewControllerAnimated:(BOOL)animated;
    
    回到指定的子控制器
    
    - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
    
    回到根控制器(栈底控制器)
    
    - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
    

    如何修改导航栏的内容

    • 导航栏的内容由栈顶控制器的navigationItem属性决定
    UINavigationItem有以下属性影响着导航栏的内容
    左上角的返回按钮
    @property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
    中间的标题视图
    @property(nonatomic,retain) UIView          *titleView;
    中间的标题文字
    @property(nonatomic,copy)   NSString        *title;
    左上角的视图
    @property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
    UIBarButtonItem *rightBarButtonItem  右上角的视图
    @property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;
    

    相关文章

      网友评论

          本文标题:UI进阶7 控制器的创建

          本文链接:https://www.haomeiwen.com/subject/xzxysttx.html