OC中UITabBarController控制器

UITabBarController(记为O)常用于管理多个导航控制器,例如有ABC三个导航控制器,可以:addChildViewController(记为A), addChildViewController(B), addChildViewController(C)将其添加,或者设置数组viewControllers=[A,B,C]。ABC称作子控制器,O称作父控制器(只是称谓)。它管理的控制器一旦加载内存不会释放,即不会从新加载。比如程序刚启动时只显示A(懒加载,只有需要时才加载),然后有A跳转B,程序会调用B的viewDidLoad,第二次切换到B时不会调用B的viewDidLoad,因为就没有从内存释放。

UITabBarButton(高49个点)里面显示的内容,由对应子控制器的tabBarItem属性决定.如果是导航控制器,如果设置了导航控制器的topViewController.title(应该是栈底控制器才合理,不过在向TabBar添加时导航控制器只有这一个控制器既是栈底也是栈顶),会改变两个地方,一个是TabBarController图 2,所示,另一个是UINavigationController的图 1。基于此,就可以实现TabBar和导航栏显示的title不一样:先设置topViewController.title,然后再设置tabBarItem覆盖。

图 1导航栏标题

图 2 TabBar

遵守了UITabBarControllerDelegate后可以做一些其它自定义处理,比如当从A跳转到B时想实现一些功能可在didSelectViewController函数中执行。另外可以自定义UITabBar。

时间: 2024-10-07 23:40:35

OC中UITabBarController控制器的相关文章

OC中UINavigationController控制器

一.概述 UINavigationController以栈的形式保存子控制器,pop push方法来弹入弹出控制器(且只能用来弹入弹出导航管理的控制器,因为是栈式管理).永远只显示处于栈顶的控制器,当pop一个控制器时内存已释放(会调用deinit/dealloc函数),再次push此控制器时会从新加载(调用viewdidload).方法如下: 1 使用push方法能将某个控制器压入栈 - (void)pushViewController:(UIViewController *)viewCont

iOS开发中标签控制器的使用——UITabBarController

正文 iOS开发中标签控制器的使用——UITabBarController 一.引言 与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理方式是纵向的,采用push与pop切换控制器,标签的管理是横向的,通过标签的切换来改变控制器,一般我们习惯将tabBar作为应用程序的根视图控制器,在其中添加导航,导航中在对ViewController进行管理. 二.创建一个标签控制器 通过如下的步骤,我们可以很简便的创建一个TabBarCo

关于OC中消息转发机制的理解以及在项目中的实际应用

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">关于OC中的消息转发机制想必大家都很了解,现在来温习一下:</span> 一.什么是消息转发? @selector 是什么? 1一种类型 SEL 2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转.: NSSelectorFromString()   /   NSS

OC中NSClassFromString()与NSStringFromClass()的用法及应用场景

1.NSClassFromString()利用一个字符串创建一个类,我是在标签控制器中 UITabBarController中创建它的子控制器中使用的 1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 self.view.backgroundColor = [UIColor whiteColor]; 4 5 [self addChildViewControllerWithClassName:[ZSHomeViewController descrip

设计模式之观察者模式(关于OC中的KVO(Observer)\KVC\NSNotification)

学习了这么久的设计模式方面的知识,最大的感触就是,设计模式不能脱离语言特性.近段时间所看的两本书籍,<大话设计模式>里面的代码是C#写的,有一些设计模式实现起来也是采用了C#的语言特性(C#的API,抽象类,在OC中是没有抽象类.没有多继承关系),<设计模式之禅>里面的代码是JAVA写的,与OC差距也是比较大. 但是我想,这些都不是问题,学习设计模式主要学习的是其中的思想,并将之改造成自己所熟悉语言的模式,大同小异.所需要注意的是,在学习的过程中,将之与语言结合起来,多思考.多实践

IOS中POP控制器 但是并没有被销毁

周六加班,真是个让人悲伤的故事.今天改BUG的时候 发现了一个问题,我的控制器注册了几个监听方法.当我pop掉这个控制器的时候,看似是从栈里移除掉了,然而当广播发来的时候,依旧响应了监听方法,这就很尴尬了.于是我跟踪了一下代码,发现当我pop之后根本没有走到deinit方法(swift) 也就是OC中的dealloc 方法.好吧,今天我就总结一下 当碰到这种情况的时候如何去 找到问题,或者说 在我们平时写代码的时候 如何避免这些问题发生. 归根结底,这种情况的发生就是当前控制器被某个对象强引用,

关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型

关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使用NSStringFromCGRect(CGRect rect)来直接打印一个结构体,其他打印可以参考以下内容 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFrom

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 2)可变数组 - (void)sortUsingSelector:(SEL)comparator; - (void)sortUsingComparator:(NSComparator)cmptr; 3).字典排序 - (NS

关于void*类型的用法(相当于OC中的id类型)

关于void*类型的用法(相当于OC中的id类型) 1.C++语言在对于void* 类型的使用很特别,因为void* 可以间接引用任何其他数据类型的指针,比如int*.float*甚至抽象数据类型的指针,而且可以从void* 强制转换为任何其他数据类型的指针,所以使用起来有时候会比较危险.如果开始将一个void*的指针间接引用一个float*的指针,然后将这个void*指针强制转化为一个int*类型的指针,编译器不会给出错误甚至警告,但是输出的数据却匪夷所思,如果再强制转换会float*则不会出