自定义TabBarController
来源:互联网 发布:苏州人工智能研究院 编辑:程序博客网 时间:2024/04/30 04:26
一、自定义的思路
iOS中的TabBarController确实已经很强大了,大部分主流iOS应用都会采用。但是往往也不能满足全部的需求,因此需要自定义TabBar,自定义需要对系统的TabBar工作方式有很好的理解,自定义需要勇气。
自定义TabBar的原则:尽量利用系统自带TabBar,只改需要改的地方。
二、自定义TabBar的总体过程
1.先把自带的TabBar条给取消了
2.自己做一个view,上面放几个按钮,设定按钮的点击事件.并设置selectIndex。
3.关联各个子viewController,覆盖相关事件。
三、细节很重要
1. 让自己创建的按钮关联到viewController:
•用tabbar的selectedIndex属性.设置这个属性就行了.
2. 取消系统的高亮:
•可以自定义一个按钮.重写里面的setHighhighted方法,什么也不做就行了.(如果调用super就相当于没写)
3. 关于几个按钮只选中一个的方法:
•设置一个属性,记录上一个选中的按钮.
•点击当前按钮时,把上一个按钮设置为未选中,并把当前按钮设置为选中,最后把当前按钮赋值给上一个按钮.
四、初步自定义
直接上代码,详见注释。
XNTabBarController.h
XNTabBarController.m
XNTabBarButton.h
XNTabBarButton.m
五、代码重构
重构的目的是把代码放到他最该到的地方去. 提高可读写与可拓展性。
对控件的重构要保证可重用性. 做到封装做其他应用时,可以直接拿过去用的地步.
tips :
1、关于init与initWithFrame:
•在对象初始化调用init时,会调用initWithFrame方法.
•Init与initWithFrame都会被调用.
•建议自定义控件不要重写init方法,需要初始化时重写initWithFrame方法.
•好处:其他人调用无论是调用init,还是调用initWithFrame都会调用initWithFrame方法.
2、关于控件的布局代码:
•建议写在layoutSubviews方法中.
•不要忘记写super方法
•将设置x,y,frame等写在这里面.
3、将自定义的Tabbar添加为系统TabBar的子视图,这样TabBar的切换自动隐藏/滑动功能就不用自己做了. (hidebottombaronpush)
重构后的代码如下:
将自定义的TabBar单独建立,并将代码移过去。
设置代理方法,工具栏按钮被选中,记录从哪里跳转到哪里.
原先的XNTabBarController.m经过修改后,注释了原先的代码。
自定义后的效果图:
例子源码下载 : http://download.csdn.net/detail/xn4545945/7572263
转载请注明出处:http://blog.csdn.net/xn4545945 0 0
- 自定义TabBarController
- 自定义TabBarController
- 自定义TabBarController
- 自定义TabBarController
- 自定义TabBarController
- 自定义TabbarController
- iOS 自定义TabBarController
- 【iOS】自定义TabBarController
- iOS 自定义TabBarController
- iOS 自定义tabBarController
- iOS 自定义TabBarController
- 【iOS】自定义TabBarController
- iOS 自定义TabBarController
- iOS 自定义TabBarController
- 【iOS】自定义TabBarController
- iOS 自定义TabBarController
- iOS 自定义TabBarController
- iOS 自定义TabBarController
- tinyxml源码剖析(1)-源码中几个主要类的关系
- 安卓几种界面布局的详解
- 我的Android之旅——学习、项目、心态
- PCB元件快速分类排列方法
- 判断是否能通过添加一个字母将字符串变为回文串
- 自定义TabBarController
- rosrun时直接设置参数
- 逆袭系列日志说明-20150923
- POJ-2425(A Chess Game)——博弈论 SG函数
- Android基础学习之SQLiteHelper(数据库帮助类)
- MySQL函数的使用
- MATLAB科学计算自学笔记
- UVA 1356 Bridge 自适应辛普森
- html5