一 多控制器

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. 搭建一个Web应用

    因为EasyUI会涉及到与后台数据的交互,所以使用Spring MVC作为后台,搭建一个完整的Web环境 使用gradle作为构建工具 build.gradle group 'org.zln.lkd' ...

  2. f2fs解析(五)什么叫做compacted summary

    f2fs中普通的summary是长这样的:每一个段的SSA block中,前半部分是这个段的SSA,然后对于HOT_DATA以及COLD_DATA段,存放是的是nat journal 和 sit jo ...

  3. Bolts-Android

    对Android客户端编程来说,有个明确的规则是不能在ui线程里面做耗时的操作.这样就要求网络请求.文件读写等等操作都要异步操作.而异步操作完成后,往往需要再更新ui界面.最直接的想法是回调,只要保证 ...

  4. [tools]camtasia studio8.6

    实际情况: 装了汉化补丁包后坏事,最后还是没装汉化补丁包.直接用英文版的.安装过程中输入序列号即可激活. ):输入注册码安装 用户名:大眼仔~旭(Anan) 注册码:GCABC-CPCCE-BPMMB ...

  5. C#中事件的继承

    C#中的子类无法调用父类的事件,可以通过在父类中创建一个方法来调用父类的事件,而子类通过调用父类的方法来触发事件. class parent { protected string name; publ ...

  6. SQL SERVER提供了大量的WINDOWS和SQLSERVER专用的排序规则

    初始选择结果 select * from WordDictionary 下面是按照汉字拼音排序 select * from WordDictionary order by word collate C ...

  7. main函数中argc和argv含义

    在main函数中经常可以看到int main(int argc, char ** argv)的函数头,这里的形参int argc, char ** argv究竟是啥含义呢? &1 int ar ...

  8. 一起写一个Android图片加载框架

    本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ...

  9. 【JVM】模板解释器--如何根据字节码生成汇编码?

    1.背景 仅针对JVM的模板解释器: 如何根据opcode和寻址模式,将bytecode生成汇编码. 本文的示例中所使用的字节码和汇编码,请参见上篇博文:按值传递还是按引用? 2.寻址模式 本文不打算 ...

  10. ios上uiwebview的一些实用技巧

    前几个星期接到公司一个项目,要用webview在客户端上播视频,作为一个前端实习生,这种需求真是蛋疼……一不知webview是何方神圣,二不知咋调试…… 下面就是蛋疼的开始:  寻找调试工具:好,非w ...