一 多控制器

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

  1. 比如,用一个控制器A去管理3个控制器BCD
  2. 控制器A被称为控制器BCD的“父控制器”
  3. 控制器BCD的被称为控制器A的“子控制器”

举个例子:

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

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

二 导航控制器

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

  1. @property(nonatomic,copy) NSArray *viewControllers;
  2. @property(nonatomic,readonly) NSArray *childViewControllers;

  使用push方法能将某个控制器压入栈

  1. - (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. UINavigationController * nav = [[UINavigationController alloc]init];
  6. self.window.rootViewController = nav;
  7. NSLog(@"%@" , nav.navigationBar );
  8.  
  9. UIViewController *vc1 =[[UIViewController alloc]init];
  10. vc1.view.backgroundColor = [UIColor redColor];
  11.  
  12. UIViewController *vc2 =[[UIViewController alloc]init];
  13. vc2.view.backgroundColor = [UIColor orangeColor];
  14.  
  15. [nav pushViewController:vc1 animated:NO];
  16. [nav pushViewController:vc2 animated:NO];
  17.  
  18. [self.window makeKeyAndVisible];
  19.  
  20. return YES;
  21. }

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

AppDelegate.m

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

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

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

设置导航按钮的标题:

  1. self.navigationItem.title = @"One";

设置导航的返回值:

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

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

设置左边的的按钮

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

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

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

知识点:

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

 
 

轻量级应用开发之(10) UINavigationController导航控制器的更多相关文章

  1. 【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解

    (1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最以下,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...

  2. UINavigationController导航控制器

    UINavigationController导航控制器,是多个界面间跳转的重要元素,可以理解为它存储着多个viewController,它的存储结构是栈,栈的特点是先进后出,所以添加视图控制器时,要特 ...

  3. UINavigationController 导航控制器 ,根据文档写的一些东西

    今天讲了导航控制器UINavigationController 和标签栏视图控制器UITabBarController 先来说一说导航视图控制器  UINavigationController 导航控 ...

  4. iOS开发 — (UINaVigationController)导航控制器,界面传值

    UINavigationController 继承于 UIViewController , 以栈的方式管理所 控制的视图控制器 . 至少要有一个被管理的视图控制器 ,这个控制器我们称作导航控制器的根视 ...

  5. IOS开发-表视图LV3导航控制器

    学到这里感觉有点难了,其实这篇文章再草稿箱里放了好久了~ 最近对于学习的热情下降了.这不行-抓紧学习走起! 在这一章节的学习中主要针对导航控制器及表视图来建立多视图的应用, 首先要了解一些概念-- 1 ...

  6. UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解

    (1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...

  7. IOS UINavigationController 导航控制器

    /** 导航控制器掌握: 1.创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootVie ...

  8. IOS第12天(2,UINavigationController导航控制器)

    ****HMAppDelegate.m @implementation HMAppDelegate - (BOOL)application:(UIApplication *)application d ...

  9. UINavigationController 导航控制器

    一.导航视图控制器 1.管理视图控制器 2.控制视图控制器之间的跳转 3.是以压栈和出栈的形式来管理视图控制器 4.导航视图控制器必须要设置根视图控制器 5.导航是视图控制器包含UINavigatio ...

随机推荐

  1. ArcGIS实现在线与线交叉处打断线(批量)

    from:http://he1989.blog.163.com/blog/static/2052041092012631112459704/ 打开ArcgisDesktop中的ArcToolBox 找 ...

  2. Nginx反向代理+负载均衡简单实现(http方式)

    1)nginx的反向代理:proxy_pass2)nginx的负载均衡:upstream 下面是nginx的反向代理和负载均衡的实例: 负载机:A机器:103.110.186.8/192.168.1. ...

  3. javascript去掉空格

    1.  去掉字符串前后所有空格: 代码如下: function Trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } 说明 ...

  4. f2fs解析(六)

    f2fs中有对一个bitmap进行操作的函数,感觉很巧妙,和大家分享一下: 1333 static inline void f2fs_change_bit(unsigned int nr, char ...

  5. ssh scp 复制文件和文件夹

    三,复制文件或目录命令:  复制文件:  (1)将本地文件拷贝到远程  scp 文件名用户名@计算机IP或者计算机名称:远程路径 本地192.168.1.8客户端  scp /root/install ...

  6. C# lambda表达式及初始化器

    using System;using System.Collections.Generic; using System.Linq; namespace ConsoleApplication1d { c ...

  7. Linux常用指令---tar | zip (解压缩)

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...

  8. python socket编程详细介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  9. Python类库下载

    https://sourceforge.net/projects/pywin32/files/pywin32/ WMI库的安装 下载 http://timgolden.me.uk/python/wmi ...

  10. Linux(9.21-9.27)学习笔记

    一.Vim的基本操作. Normal模式下 1.h 键 向左移动光标   2.  j  键  向下移动光标   3. k 键 向上移动光标 4. l键  向右移动光标 5.x 键  删除光标所在位置的 ...