UITabBar的三种常用方法(两种自定义)即自动切换tabbar各个子控制器
2016-07-19 00:00
465 查看
在实际的项目开发中,凡是使用UITabBarController作为导航控制器的,在使用的过程中要注意三大问题点:1 UITabBarController添加子控制的方法 2 自定义的UITabBar的继承问题 3 自定义的UITabBar, 下面就详细就这两方面进行讨论和处理
1 UITabBarController添加子控制的方法:常见有两种方法:
1.1)其中一种是使用UIViewController的添加子控制器的方法(由于UITabBarController继承至UIViewController,所以也有这个方法):addChildViewController:<#(nonnull UIViewController *)#>,使用此中方法来添加子控制时,如果UITabBarButton导航按钮的图片不存在多状态显示不同图片的需要,使用vc.tabBarItem.image来设置就可以了;但是如果导航按钮图片需要多状态显示不同状态下的图片时,必须是vc.tabBarItem.image和vc.tabBarItem.selectedImage结合使用才有效(这不再需要设置背景图片了),如果只是使用设置导航按钮的背景图片的不同状态下的图片,是无效的,因为使用这种方法添加子控制器系统只默认显示UIControlStateNormal背景图片,其他状态图片不会显示的。还有很重要一点:使用这种方法时,在自定义tabBar时,一定要使用KVC来把系统的tabBar赋值给自定义的tabBar,其他方式都是错误报错的。使用此种方法的好处是,第一个导航控制器是选中的,所以界面展示时默认第一个导航按钮是选中状态的,不用再处理了,使用下面的方法则需要再处理,推荐用此方法
1.2)另一种UITabBarController添加子控制器的方法是使用其自己的属性方法: NSArray<__kindof UIViewController *> *viewControllers;创建子控制数组来添加子控制器。这种方法可以任意通过设置按钮的不同状态下的图片来处理,十分简单,对于那些UITabBarButton导航按钮需要在不同状态下显示不同图片的需求,都可以使用这种来处理,用起来得心应手,十分快捷简单,不像第一种方法那样容易出错,可以随意自定义tabBar,根据需要来推荐使用这种方式
2 自定义的UITabBar的继承问题
关于自定义的tabBar,是继承至UITabBar还是UIView,取决于UITabBarButton(即导航栏的按钮)上面的图片和导航按钮title文字是否一体(一体即美工做图时,图片上也带有title文字了,图片和文字在一张图片上了,不需要使用代码来加载文字了,如下图1是一体的);
2.1)当图片和文字是一体时,两种都方便快捷,都可以使用;
2.2)当UITabBarButton只有图片没有相应的导航按钮文字时(即导航按钮文字还需要用代码加载),最好使用继承至UITabBar的自定义tabBar,这样方便使用系统的vc.tabBarItem.image和vc.title来直接设置,且能保证图片和文字大小比例尤其保证图片和文字良好的上下左右的位置关系,使用继承至UIView的自定义tabBar,则很可能因为图片的大小不合适而导致图片和文字的位置关系/大小比例不和谐(如下图2)。
图1:
图2:
3 自定义的UITabBar
由于tabBar属性是只读属性,因此,在自定义时,不能直接对其进行赋值(即让系统的tabBar赋值给自定义的tabBar),因此就出现了一下两种处理方式:
3.1) 使用KVC来处理,自定义的tabBar必须继承至UITabBar,由于KVC是使用运行时来实现的,因此可以使用KVC来给只读属性赋值,详细demo地址:http://pan.baidu.com/s/1i4SX1QX
3.2)不使用KVC,使用代理处理,自定义的tabBar必须继承至UIView,通过设置自定义tabBar的代理方法来实现各子控制器的切换,详细demo地址:http://pan.baidu.com/s/1bQ3Doi
3.3)不需要自定义(因为有n个控制器,tabBar对应这n个控制器,不需要添加额外的导航按钮),可以直接使用vc.tabBarItem.image vc.tabBarItem.selectedImage设置,详细demo地址:http://pan.baidu.com/s/1c2ly0EW
注意:UITabBarItem的image属性和selectedImage属性,即导航按钮的图片,这个图片默认大小是30*30像素,当图片尺寸太大时,不会自动适应导航按钮的高度了,从而图片加载不出来。因此,导航栏图片必须让美工做尺寸合适,不能太大,一般60 * 60 的就可以作为设计尺寸的上限了。
2 自动切换UITabBarController各个子控制器方法:使用UITabBarController的selectedIndex属性,只需这样设置 self.tabBarController.selectedIndex = 2;//自动切换tabbar控制器 其中2为控制器所在的tabBarItem标签
1 UITabBarController添加子控制的方法:常见有两种方法:
1.1)其中一种是使用UIViewController的添加子控制器的方法(由于UITabBarController继承至UIViewController,所以也有这个方法):addChildViewController:<#(nonnull UIViewController *)#>,使用此中方法来添加子控制时,如果UITabBarButton导航按钮的图片不存在多状态显示不同图片的需要,使用vc.tabBarItem.image来设置就可以了;但是如果导航按钮图片需要多状态显示不同状态下的图片时,必须是vc.tabBarItem.image和vc.tabBarItem.selectedImage结合使用才有效(这不再需要设置背景图片了),如果只是使用设置导航按钮的背景图片的不同状态下的图片,是无效的,因为使用这种方法添加子控制器系统只默认显示UIControlStateNormal背景图片,其他状态图片不会显示的。还有很重要一点:使用这种方法时,在自定义tabBar时,一定要使用KVC来把系统的tabBar赋值给自定义的tabBar,其他方式都是错误报错的。使用此种方法的好处是,第一个导航控制器是选中的,所以界面展示时默认第一个导航按钮是选中状态的,不用再处理了,使用下面的方法则需要再处理,推荐用此方法
1.2)另一种UITabBarController添加子控制器的方法是使用其自己的属性方法: NSArray<__kindof UIViewController *> *viewControllers;创建子控制数组来添加子控制器。这种方法可以任意通过设置按钮的不同状态下的图片来处理,十分简单,对于那些UITabBarButton导航按钮需要在不同状态下显示不同图片的需求,都可以使用这种来处理,用起来得心应手,十分快捷简单,不像第一种方法那样容易出错,可以随意自定义tabBar,根据需要来推荐使用这种方式
2 自定义的UITabBar的继承问题
关于自定义的tabBar,是继承至UITabBar还是UIView,取决于UITabBarButton(即导航栏的按钮)上面的图片和导航按钮title文字是否一体(一体即美工做图时,图片上也带有title文字了,图片和文字在一张图片上了,不需要使用代码来加载文字了,如下图1是一体的);
2.1)当图片和文字是一体时,两种都方便快捷,都可以使用;
2.2)当UITabBarButton只有图片没有相应的导航按钮文字时(即导航按钮文字还需要用代码加载),最好使用继承至UITabBar的自定义tabBar,这样方便使用系统的vc.tabBarItem.image和vc.title来直接设置,且能保证图片和文字大小比例尤其保证图片和文字良好的上下左右的位置关系,使用继承至UIView的自定义tabBar,则很可能因为图片的大小不合适而导致图片和文字的位置关系/大小比例不和谐(如下图2)。
图1:
图2:
3 自定义的UITabBar
由于tabBar属性是只读属性,因此,在自定义时,不能直接对其进行赋值(即让系统的tabBar赋值给自定义的tabBar),因此就出现了一下两种处理方式:
3.1) 使用KVC来处理,自定义的tabBar必须继承至UITabBar,由于KVC是使用运行时来实现的,因此可以使用KVC来给只读属性赋值,详细demo地址:http://pan.baidu.com/s/1i4SX1QX
3.2)不使用KVC,使用代理处理,自定义的tabBar必须继承至UIView,通过设置自定义tabBar的代理方法来实现各子控制器的切换,详细demo地址:http://pan.baidu.com/s/1bQ3Doi
3.3)不需要自定义(因为有n个控制器,tabBar对应这n个控制器,不需要添加额外的导航按钮),可以直接使用vc.tabBarItem.image vc.tabBarItem.selectedImage设置,详细demo地址:http://pan.baidu.com/s/1c2ly0EW
注意:UITabBarItem的image属性和selectedImage属性,即导航按钮的图片,这个图片默认大小是30*30像素,当图片尺寸太大时,不会自动适应导航按钮的高度了,从而图片加载不出来。因此,导航栏图片必须让美工做尺寸合适,不能太大,一般60 * 60 的就可以作为设计尺寸的上限了。
2 自动切换UITabBarController各个子控制器方法:使用UITabBarController的selectedIndex属性,只需这样设置 self.tabBarController.selectedIndex = 2;//自动切换tabbar控制器 其中2为控制器所在的tabBarItem标签
相关文章推荐
- 创建UIButton按钮的注意事项
- MD 被UISearchController卡了三个小时.....
- UUID、GUID、CLSID
- NGUI学习笔记2-窗口及子类
- HDU-4339 Query(树状数组+二分)
- NGUI自制简易虚拟摇杆
- Codeforces Round #241 (Div. 2)->A. Guess a number!
- UVA 11538 Chess Queen
- Codeforces Round #361 (Div. 2) D. Friends and Subsequences (二分+RMQ)
- Hue 使用HDFS 的 高可用
- TOJ 1455.Ultra-QuickSort(分治经典题目)
- MSSQL数据库链接字符串Asynchronous Processing=true不是异步查询吗,怎么是缓存
- 【Arduino官方教程】数字处理示例(五):按键状态变化检测
- iOS开发从入门到精通--定时器UITimer和视图对象移动
- Uva 11324 The Largest Clique
- Java中的String、StringBuilder以及StringBuffer
- HDU 5301 Buildings(思维:一道简单的难题)
- MVC+EasyUi环境搭建
- 374&375. Guess Number Higher or Lower 1&2
- Builder模式处理多个构造器