一、简介

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

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

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

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

为了便于管理控制器,iOS提供了2个比较特殊的控制器("父控制器")

UINavigationController

UITabBarController

二、使用步骤

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

三、UINavigationController的view内部结构

注意:NavigationController的NavigationBar的 的高度 是44,不包括状态栏的状态

四、子控制器的获取方式

1> 获取方式

@property(nonatomic,readonly) NSArray *childViewControllers

@property(nonatomic,copy) NSArray *viewControllers;

注意:

childViewControllers :是在UIViewController中属性,并且只读

viewControllers:是在UINavigationController中的属性

因此添加子控制器可以利用

navc.viewControllers = @[vc1,vc2];、

 2> Bug

当导航控制器使用push的动画形式添加两个控制器的时候,然后利用childViewControllers获取子控制器对象,打印时候,会显示只有一个

解决办法:动画设置为NO 即可

五、UINavigationController的原理

导航控制器是一种栈的结构(先进后出),

    • 使用push方法能将某个控制器压入栈,最后入栈的控制器为栈顶控制器,更控制器为栈底控制器

第一个入栈的控制器为rootViewController

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

方法:

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

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

    • 使用pop方法可以移除控制器
    • 将栈顶的控制器移除

- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

    • 回到指定的子控制器

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

    • 回到根控制器(栈底控制器)

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

六、修改导航控制器内容

// 设置标题

self.navigationItem.title

self.title

// 设置左右按钮

self.navigationItem.leftBarButtonItem

self.navigationItem.leftBarButtonItems

self.navigationItem.rightBarButtonItem

self.navigationItem.rightBarButtonItems

// 设置标题为自定义view

self.navigationItem.titleView

// nav bar 颜色

[self.navigationController.navigationBar setBackgroundColor:[UIColor redColor]]; // 仅仅是导航条的颜色

[self.navigationController.navigationBar setTintColor:[UIColor redColor]]; // 主题(按钮)颜色

[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]]; // 导航条+状态栏颜色

// 设置bar不透明

self.navigationController.navigationBar.translucent = NO;

// 设置自定义标题属性

// title

NSDictionary* attr = @{ NSFontAttributeName : [UIFont systemFontOfSize:10],NSForegroundColorAttributeName : [UIColor redColor] };

[self.navigationController.navigationBar setTitleTextAttributes:attr];

// titleView

UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];

titleLabel.font = [UIFont boldSystemFontOfSize:20];

titleLabel.textColor =[UIColor orangeColor];

titleLabel.textAlignment = NSTextAlignmentCenter;

titleLabel.text = @"自定义标题";

self.navigationItem.titleView = titleLabel;

// 导航条设置自定义图片为按钮(原始图 不渲染)

UIImage* image = [UIImage imageNamed:@"navigationbar_friendsearch_highlighted"];

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

IOS开发UI篇-NavigationController的基本使用的更多相关文章

  1. IOS开发UI篇-NavigationController的控制器之间的跳转

    一.效果图如下 1> 第一个控制器的NavigationBar隐藏 2> 有按钮,可以跳转到下一个控制器,返回上一个控制器或者根控制器 二.思路代码 思路: 1> 设置window的 ...

  2. iOS开发UI篇—Modal简单介绍

    iOS开发UI篇—Modal简单介绍 一.简单介绍 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展⽰出来 Modal的默认效果:新控制器从屏幕的 ...

  3. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇—多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  4. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  5. iOS开发UI篇—CAlayer(自定义layer)

    iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的Draw ...

  6. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

  7. iOS开发UI篇—懒加载

    iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

  8. iOS开发UI篇—CAlayer层的属性

    iOS开发UI篇—CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...

  9. iOS开发UI篇—CAlayer(创建图层)

    iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...

随机推荐

  1. GetProcessMemoryInfo API取得进程所用的内存

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms683219(v=vs.85).aspx 例子: https://msdn.mic ...

  2. Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

     上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...

  3. 基于公网smtp协议实现邮件服务器

    刚开始做邮件服务器开发,一切都是茫然的.在书上网上都很难找到一套完整的邮件服务器开发教程.在个人的摸索中碰到了很多蛋疼得问题.现终于完成了,将我的开发经验分享给大家. 开发环境:vs2012 mfc ...

  4. WPF最基本的4个引用

    Windowsbase Windows基本类库 PresentationCore wpf核心类库 PresentationFramework wpf框架 System.Axml 系统类库

  5. ASP.net ListItem Attributes 属性回传丢失的解决方案

    该方法为网上整理 1. 新继承一个列表控件 新控件中重写两个方法: using System; using System.Collections.Generic; using System.Linq; ...

  6. Rotate It !!(思维)

    Rotate It !! Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  7. Rainmeter 雨滴桌面 主题分享

    说明 先安装主程序 Rainmeter-3.1.exe,然后安装 Techzero_1.0.rmskin,打开主题管理应用主题就可以. 下载 http://pan.baidu.com/s/1i3zI3 ...

  8. 安卓查询当前所在地天气及查询地区(城市)代码cityCode localCode

    源码可获取用户当前位置的天气情况 本代码最有价值的部分在于关于城市码的获取,我用了两个小时才将全国主要城市的编码整理成HashMap,下载即可用! 试一试:点击下载. ---------------- ...

  9. 一个用 Cumulative Penalty 培训 L1 正规 Log-linear 型号随机梯度下降

      Log-Linear 模型(也叫做最大熵模型)是 NLP 领域中使用最为广泛的模型之中的一个.其训练常採用最大似然准则.且为防止过拟合,往往在目标函数中增加(能够产生稀疏性的) L1 正则.但对于 ...

  10. UIButton-初识IOS

    今天,我学到了所有app经常用到的UIButton控件,废话不多说,这些都是我学习的时候总结的一些,希望可以帮到以后的初学者,IOS初学不应该直接拖拽,感觉不易于理解,所以我总结的基本上全是纯代码编辑 ...