一、Container

一个iOS的app很少只由一个ViewController组成,除非这个app极其简单。当app中有多个ViewController的时候,我们就需要对这些ViewController进行管理

容器:负责展示一个或者多个ViewController,并管理这些View Controller的视图生命周期

大部分容器本身也是一个ViewController, 被容器管理的这些控制器可以称为容器的子控制器(ChildViewController),而容器可以被称为父控制器(parentViewController)

也有极少数容器不是ViewController,比如UIPopoverController,其继承于NSObject

常用的Container:UITabbarController、UINavigationController

二、Container的特征

可以添加ChildViewController, 移除ChildViewController,切换ChildViewController的显示,

持有所有ChildViewController的实例(一般存在NSArray中)

负责ChildViewController的生命周期方法的调用

(viewWillAppear,viewDidAppear,viewWillDisaapper,viewDidDisappear),以及旋转事件的传递

三、UITabBarController

一个UITabBarController的view由两部分组成

上面部分用来容纳子控制器的view

下面部分是一个UITabBar对象,会根据子控制器的tabBarItem属性生成相应的图标和标题

四、UITabBarController添加子控制器

通过设置viewControllers属性或者addChildViewController方法可以添加子控制器

NSArray *viewControllers

- (void)addChildViewController:(UIViewController *)childController

五、UITabBarItem和UITabbar

UIViewController的tabBarItem属性决定了UITabBar显示的内容

使用系统自带的UITabBarItem样式:

controller.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemSearch tag:1] autorelease];

自己设置UITabBarItem的标题和图片:

controller.tabBarItem.title = @”More”;

// controller.title也可以用于设置标题

controller.tabBarItem.image = [UIImage imageNamed:@”more”];

设置UITabBarItem右上角的红色数字

controller.tabBarItem.badgeValue = @”10”;

六、UINavigationController

UINavigationController也是容器的一种,负责子控制器之间的跳转

UINavigationController以栈的形式保存子控制器,这里的栈其实是个NSArray对象,只有位于栈顶的子控制器的view才是可见的

初始化UINavigationController时,需要传入一个UIViewController实例作为根控制器,这个根控制器永远处于栈底(如果栈中只有一个对象,那么根控制器也处于栈顶)

将某个UIViewController压入栈时,控制器的视图会从窗口右侧滑入;出栈时,栈顶的控制器会被移除,其下的控制器的视图会从窗口左侧滑入

常用属性:

UIViewController *topViewController 处于栈顶的子控制器

NSArray *viewControllers 栈,存放着所有的子控制器

七、UINavigationController结构

UINavigationController的view包括了两大部分:

上面是UINavigationBar

下面是topViewController的view,topViewController的navigationItem属性决定了UINavigationBar显示的内容

八、UINavigationBar的标题

注意:UINavigationItem并不是UIView的子类

九、UINavigationItem

除了title,UINavigationItem还有一些属性能够影响UINavigationBar的显示内容

UIBarButtonItem *backBarButtonItem 左上角的返回按钮

UIView *titleView   中间的标题视图

UIBarButtonItem *leftBarButtonItem  左上角的视图

UIBarButtonItem *rightBarButtonItem  右上角的视图

十、UINavigationBar与UINavigationItem

UINavigationController添加子控制器

UINavigationController的pushViewController:animated:方法可以将一个控制器压入栈中

子控制器都有个navigationController属性,可以获取当前的UINavigationController对象

假如从子控制器c1跳转到子控制器c2,可以这样做:

[c1.navigationController pushViewController:c2 animated:YES];

iOS基础 - 控制器管理的更多相关文章

  1. iOS基础 - 控制器

    一.当两个控制器互为父子关系的时候,它们的view一般也是互为父子关系 比如想添加A控制器的view到B控制器的view上,就应该让A控制器成为B控制器的子控制器,而B控制器就称为A控制器的父控制器 ...

  2. [iOS基础控件 - 6.11.2] - UINavigationController 多控制器 简单使用

    A.概念 1.通常一个app有多个控制器 2.需要对这些控制器进行管理 3.有多个view的时候,用一个父view去管理多个子view 4.控制器管理也是如此,使用给一个父控制器,去控制子控制器   ...

  3. iOS 视图控制器转场详解

    iOS 视图控制器转场详解 前言的前言 唐巧前辈在微信公众号「iOSDevTips」以及其博客上推送了我的文章后,我的 Github 各项指标有了大幅度的增长,多谢唐巧前辈的推荐.有些人问我相关的问题 ...

  4. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  5. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  6. iOS基础 - iOS程序启动原理

    一.UIApplicationMain 在main.m的main函数中执行了UIApplicationMain这个方法,这是ios程序的入口点 int UIApplicationMain(int ar ...

  7. 说说iOS与内存管理(上)

    http://www.cocoachina.com/ios/20150625/12234.html 说起内存管理,看似老生常谈,而真正掌握内存管理的核心其实并不简单.ARC/MRR以及“谁分配谁就负责 ...

  8. iOS ARC内存管理

    iOS的内存管理机制,只要是iOS开发者,不管多长的时间经验,都能说出来一点,但是要深入的理解.还是不简单的.随着ARC(自动管理内存)的流行.iOS开发者告别了手动管理内存的复杂工作.但是自动管理内 ...

  9. iOS视图控制器的生命周期

    今天面试有一道面试题因为回答不好,因为也不经常涉及所以有点模糊,我选择了最保守的回答,没有展开写出我对这个问题的理解. 问题:IOS 开发 loadView 和 viewDidLoad 的区别? 经过 ...

随机推荐

  1. 4、Cocos2dx 3.0三,找一个小游戏开发Hello World 分析

    尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 Hello World 分析 打开新 ...

  2. WinForm LED循环显示信息,使用定时器Threading.Timer

    原文:WinForm LED循环显示信息,使用定时器Threading.Timer 这里用一个示例来演示timer如何使用.示例:LED屏幕显示描述:这个示例其实很简单,LED屏幕上显示3个信息:  ...

  3. Nyoj 布线问题(并查集&&图论)

    描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有的楼都供上电.2.所用电线花费最少   输入 第一行是一个整数n表示有n组测试数据.(n ...

  4. leetcode 之 Unique Paths

    Unique Paths A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagra ...

  5. bigdata_spark_源码修改_本地环境搭建_eclise

    Eclipse 下开发调试环境的配置该小节中使用的各项工具分别为:mac (Windows 7)+Eclipse Java EE 4.4.2+Scala 2.10.4+Sbt 0.13.8+Maven ...

  6. Java EE (1) -- Java EE 6 Web Component Developer Certified Expert(1z0-899)

    1: hash map, hash tables 的区别 The HashMap class is roughly equivalent to Hashtable, except that it is ...

  7. SharePoint 创建一个简单的Web Part 部分

    SharePoint 创建一个简单的Web Part 部分 标准Web零件有时会很强大,运行多个功能的能力. 本文介绍了如何使用Visual Studio 创建一个简单的Web部分. 1. 打开VS, ...

  8. 【百度地图API】如何区分地址解析和智能搜索?

    原文:[百度地图API]如何区分地址解析和智能搜索? 摘要: 很多用户一直无法区分地址解析geocoder和智能搜索localsearch的使用场景.该文章用一个详尽的示例,充分展示了这两个类,共5种 ...

  9. Samza/KafkaAnalysizing

    Apache Samza is a distributed stream processing framework. It uses Apache Kafka for messaging, and A ...

  10. hdu 4932 Miaomiao&#39;s Geometry(暴力)

    题目链接:hdu 4932 Miaomiao's Geometry 题目大意:在x坐标上又若干个点,如今要用若干条相等长度的线段覆盖这些点,若一个点被一条线段覆盖,则必须在这条线的左端点或者是右端点, ...