一 多控制器

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
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

     self.window = [[UIWindow alloc]init];

     UINavigationController * nav = [[UINavigationController alloc]init];
self.window.rootViewController = nav;
NSLog(@"%@" , nav.navigationBar ); UIViewController *vc1 =[[UIViewController alloc]init];
vc1.view.backgroundColor = [UIColor redColor]; UIViewController *vc2 =[[UIViewController alloc]init];
vc2.view.backgroundColor = [UIColor orangeColor]; [nav pushViewController:vc1 animated:NO];
[nav pushViewController:vc2 animated:NO]; [self.window makeKeyAndVisible]; return YES;
}

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

AppDelegate.m

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

     self.window = [[UIWindow alloc]init];

     UINavigationController * nav = [[UINavigationController alloc]init];
self.window.rootViewController = nav;
NSLog(@"%@" , nav.navigationBar ); UIViewController *vc1 =[[UIViewController alloc]init];
vc1.view.backgroundColor = [UIColor redColor]; UIViewController *vc2 =[[UIViewController alloc]init];
vc2.view.backgroundColor = [UIColor orangeColor]; nav.viewControllers = @[vc1,vc2]; [self.window makeKeyAndVisible];
return YES;
}

也可以通过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中打开代码区域。

 
 

轻量级应用开发之(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. R 语言assign 和get 函数用法

    assign函数在循环时候,给变量赋值,算是比较方便 1.给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("nginx_server_ ...

  2. memcached缓存知识简单梳理

    memcached工作原理基本概念:slab,page,chunk.slab,是一个逻辑概念.它是在启动memcached实例的时候预处理好的,每个slab对应一个chunk size,也就是说不同s ...

  3. 神奇的GO语言:空接口(interface)

    对于go语言来说,设计最精妙的应该是interface了,直白点说interface是一组method的组合.至于更加详细的描述,本文不做介绍,今天谈谈空接口. 空interface(interfac ...

  4. CUDA安装及配置:Windows 7 64位环境

    最近又有新的项目要做了,这次是关于CUDA---多核高性能计算的问题,所以最近一直在学习CUDA的编程问题,昨天安装软件完毕,运行第一个程序的时候还是遇到很多问题.所以这里给大家一起分享一下, 有和我 ...

  5. windows7下修改hosts文件无效解决办法

    通常会为了开发方便.或者屏蔽掉一些恶意网站,我们会在hosts(c:\windows\system32\drivers\etc\hosts)文件中进行相应的域名指向,例:

  6. caffe windows学习:第一个测试程序

    caffe windows编译成功后,就可以开始进行测试了.如果还没有编译成功的,请参考:caffe windows 学习第一步:编译和安装(vs2012+win 64) 一般第一个测试都是建议对手写 ...

  7. 在matlab中对hsv进行均匀量化和非均匀量化

    首先,进行非均匀量化,H,S,V三通道分别量化为16,4,4级,返回一个向量.量化依据如下表: function vec = getHsvHist(Image) [M,N,O] = size(Imag ...

  8. [CareerCup] 5.3 Next Binary Representation 下一个二进制表达

    5.3 Given a positive integer, print the next smallest and the next largest number that have the same ...

  9. Android 中 appcompat_v7与各类资源报错问题

    最近导一个项目进eclipse弄了一天都弄不好,先总结如下 首先按照网上其他同志的导入sdk/extras下的appcompat_v7项目.然后 发现 我们这里已经更新到6.0了,也就是说,我们报错的 ...

  10. Android中的Intent详解

    前言: 每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面.因为每一个Acticity的任务不一样,所以经常互在各个Activi ...