zoukankan      html  css  js  c++  java
  • 轻量级应用开发之(10) UINavigationController导航控制器

    一 多控制器

    1)一个iOS的app很少只由一个控制器组成,除非这个app极其简单
    2)当app中有多个控制器的时候,我们就需要对这些控制器进行管理
    3)有多个view时,可以用一个大的view去管理1个或者多个小view
    4)控制器也是如此,用1个控制器去管理其他多个控制器

    比如,用一个控制器A去管理3个控制器B、C、D
    控制器A被称为控制器B、C、D的“父控制器”
    控制器B、C、D的被称为控制器A的“子控制器”
    

    举个例子:

    首先设置加载面板为空,好让程序加载自定义控制器。

     
    然后更新 AppDelegate.m
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
       //创建window
        self.window = [[UIWindow alloc]init];
        
        //给wiindow一个根控制器
        UINavigationController *nav = [[UINavigationController alloc]init];
        self.window.rootViewController = nav;
        
        //设置主要的并且显示
        [self.window makeKeyAndVisible];
        return YES;
    }

    二 导航控制器

      利用UINavigationController,可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是系统自带的“设置”应用。
      UINavigationController以栈的形式保存子控制器
    @property(nonatomic,copy) NSArray *viewControllers;
    @property(nonatomic,readonly) NSArray *childViewControllers;
      使用push方法能将某个控制器压入栈
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

      使用pop方法可以移除控制器

    AppDelegate.m
     1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     2    
     3     self.window = [[UIWindow alloc]init];
     4    
     5     
     6     UINavigationController * nav = [[UINavigationController alloc]init];
     7     self.window.rootViewController = nav;
     8     NSLog(@"%@" , nav.navigationBar );
     9     
    10     UIViewController *vc1 =[[UIViewController alloc]init];
    11     vc1.view.backgroundColor = [UIColor redColor];
    12     
    13     UIViewController *vc2 =[[UIViewController alloc]init];
    14     vc2.view.backgroundColor = [UIColor orangeColor];
    15     
    16     
    17     [nav pushViewController:vc1 animated:NO];
    18     [nav pushViewController:vc2 animated:NO];
    19     
    20     [self.window makeKeyAndVisible];
    21     
    22     return YES;
    23 }

     也可以通过这中方式来生成多个导航控制器:

    AppDelegate.m

     1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     2    
     3     self.window = [[UIWindow alloc]init];
     4     
     5     
     6     UINavigationController * nav = [[UINavigationController alloc]init];
     7     self.window.rootViewController = nav;
     8     NSLog(@"%@" , nav.navigationBar );
     9     
    10     UIViewController *vc1 =[[UIViewController alloc]init];
    11     vc1.view.backgroundColor = [UIColor redColor];
    12     
    13     UIViewController *vc2 =[[UIViewController alloc]init];
    14     vc2.view.backgroundColor = [UIColor orangeColor];
    15     
    16     nav.viewControllers = @[vc1,vc2];
    17     
    18     [self.window makeKeyAndVisible];
    19     return YES;
    20 }

     也可以通过UINavigationController * nav = [[UINavigationController alloc]initWithRootViewController:vc1];来直接生成根控制器。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
       
        self.window = [[UIWindow alloc]init];
        
        UIViewController *vc1 =[[UIViewController alloc]init];
        vc1.view.backgroundColor = [UIColor redColor];
        
        UIViewController *vc2 =[[UIViewController alloc]init];
        vc2.view.backgroundColor = [UIColor orangeColor];
        
        UINavigationController * nav = [[UINavigationController alloc]initWithRootViewController:vc1];
        
        [nav pushViewController:vc2 animated:YES];
        
        self.window.rootViewController = nav;
        [self.window makeKeyAndVisible];
        return YES;
    }

     设置导航按钮的标题:

     self.navigationItem.title = @"One";

    设置导航的返回值:

      如果要设置第二个页面的返回按钮,那么需要在第一个页面设置。

       self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];

    设置左边的的按钮

     self.navigationItem.leftBarButtonItem= [[UIBarButtonItem alloc]initWithTitle:@"left" style:UIBarButtonItemStylePlain target:nil action:nil];

    删除栈顶控制器,跳转回上一个控制器

    UINavigationController * nav = [self navigationController];
    [nav popViewControllerAnimated:YES];

    知识点:

    Xcode: commond + option+ 回车 在storyboard/xib中打开代码区域。

     
     
  • 相关阅读:
    线程池全面总结
    有状态(Stateful)与无状态(Stateless)
    Callable接口--有返回值的线程
    集合类--最详细的面试宝典--看这篇就够用了(java 1.8)
    [Android App]IFCTT,即:If Copy Then That,一个基于IFTTT的"This"实现
    应朋友死皮白咧地邀请贴一个招聘广告
    [Android]Android焦点流程代码分析
    [Android]Android内存泄漏你所要知道的一切(翻译)
    [Android]Gradle 插件 DiscardFilePlugin(class注入&清空类和方法)
    [Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)
  • 原文地址:https://www.cnblogs.com/wangshuo1/p/5471206.html
Copyright © 2011-2022 走看看