iOS 修改UITabBar的默认点击行为
当我接到如上图这个需求的时候,评估了一下。感觉如上图的效果用自定义UITabBar的方式就可以实现了(做法类似新浪微博的自定义UITabBar中的不规则按钮),没错,就是干。一番折腾之后,我实现了自己的自定义UITabBar,然后一经测试,问题出来了。
当navigationController拥有超过2个ViewController的时候,我使用self.navigationController popToViewController: animated:方法的时候会出现系统自带的UITabBar的按钮和我自定义UITabBar的按钮重叠的问题。
这下坑爹了吧,我明明在自定义UITabbar按钮的时候把系统自带的UITabbar里面的控件删掉了啊!那要不将就着用吧,不要使用popToViewController操作就好了吧,这个是坑爹和坑队友了,让团队里的其它人都不能使用self.navigationController popToViewController: animated:方法了。
这个时候就要换个思路来了,我一定要自定义UITabBar么? 有没有办法点击按钮的时候不要去跳到某个ViewController,而是执行自定义的事件。并且本来UITabBar里面的按钮的图片也是可以调位置的,这样是不是就完美解决这个需求了呢?程序员就是一类不断遇到问题并解决问题的人呐。
找到了UITabBarController的代理UITabBarControllerDelegate,看了看里面的方法,有发现了。点击了UITabBar的按钮之后,UITabBarController会执行UITabBarControllerDelegate的以下方法,并将要跳转到的UIViewController作为参数传递给一下代理方法。如果代理方法返回YES那么UITabBarController就会正常跳转,如果返回NO,那么就不会做跳转动作。方法如下:
- (BOOL)tabBarController:(UITabBarController*)tabBarController shouldSelectViewController:(UIViewController*)viewController
理清思路了,接下来就上代码了。
1、为了方便,基本上所有的代码都是写在AppDelegate
2、分别创建了A,B,C,D这四个ViewController,每个ViewController有一个用于区别彼此的文本。
3、为每个ViewController创建对应的UITabBarItem。
4、创建四个对应ViewController的对象。
5、将ViewController的对象放到数组容器里面。
6、设置UITabBarController的viewControllers属性,设置UITabBarController的代理,设置UITabBarController为window的RootViewController。
再来一个图
7、实现UITabBarController的队友代理方法,判断是否是要跳转到D ViewController,如果是的话,那么就不要跳转了,如果不是那么不做处理。
8、做出一个弹窗提示,做Demo我就比较随意点喽,还是直接用UIAlertView来提示。
9、如左边模拟器运行图所示,点击第四个按钮,会有弹窗出现,Xcode底部输出对应的LOG。
10、这个弹窗只是做一个抛砖引玉的效果,在捕捉到UITabBar的按钮点击事件之后,你就可以实现你的业务逻辑了,而且不用担心和系统UITabBar的兼容问题(因为你本来就没有做改变),也不用担心队友的各种popToViewController操作
iOS 修改UITabBar的默认点击行为的更多相关文章
- iOS运用runtime全局修改UILabel的默认字体
iOS运用runtime全局修改UILabel的默认字体 一.需求背景介绍 在项目比较成熟的基础上,遇到了这样一个需求,应用中需要引入新的字体,需要更换所有Label的默认字体,但是同时,对于一些特殊 ...
- 将iOS中Safari 的默认搜索引擎由google.cn改为google.com的方法
众所周知虽然Google大部分的业务已经迁出中国大陆,访问Google的中国站点只会出现一个投影网站,但是很长一段时间里如果想要访问Google仍然能跳转到google.com.hk这个香港的节点,这 ...
- Android Launcher分析和修改1——Launcher默认界面配置(default_workspace)
最近工作都在修改Launcher,所以打算把分析源码和修改源码的过程记录下来,最近会写一些关于Launcher的分析和修改博文.因为我是修改4.0.3的Launcher,所以后面文章里面的Launch ...
- MyEclipse如何修改XML文件默认打开的编辑器
1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...
- 如何修改WordPress网站默认登录地址wp-admin
使用过WordPress程序建网站的学员都知道,我们使用Wordpress建好的网站,它的网站登录后台就是“网站域名/wp-admin”.如下图: 为了网站安全,如何修改Wordpress网站默认登录 ...
- 如何修改 WordPress 的默认 Gravatar 头像
如何修改 WordPress 的默认 Gravatar 头像? wordpress默认的头像是下面这种 在Settings的Discussion中,默认选择第一个Mystery Person, 意思是 ...
- IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容
IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容 UIAlertController *alertVC = [UIAlertController alertControl ...
- StringGrid 实例3: 本例功能: 1、修改 TStringGrid的默认宽与高; 2、添加行; 3、确认当前单元并赋值.
实例3: 本例功能: 1.修改 TStringGrid的默认宽与高; 2.添加行; 3.确认当前单元并赋值. 实例图形:
- xampp默认mysql密码设置,修改mysql的默认空密码
xampp默认mysql密码设置,修改mysql的默认空密码 分类: xampp2012-09-12 11:24 30264人阅读 评论(5) 收藏 举报 mysqlphpmyadminauthent ...
随机推荐
- [Functional Programming] Arrow contramap vs map and promap
In previous post, Arrow Functor with contramap, we have seen how to opreating on params before we in ...
- 迅为4412开发板Linux驱动教程——编写简单应用调用驱动
Linux驱动教程:http://pan.baidu.com/s/1c0hljUS 编写简单应用调用驱动--头文件 • 打印头文件 – include <stdio.h>调用打印函数pri ...
- 【Python】使用torrentParser1.03对多文件torrent的分析结果
Your environment has been set up for using Node.js 8.5.0 (x64) and npm. C:\Users\horn1>cd C:\User ...
- “图片+标签”的社交玩法已经被验证?nice 宣布获得新一轮3600万美元融资【转载+整理】
原文地址 有次上班做公交,期间听到一个老太太说:"我加你微信啊--",还有一次去看老中医,并交换了电话,可当我回去后发现这个大夫竟然加了我微信--这些都令我有点吃惊,连60.70岁 ...
- LabVIEW上位机与串口通信
渊源 大一的时候,学校开了门公共选修课,叫LabVIEW编程,当时的我当然还不知道LabVIEW是啥东东,但还是选了.上课的老师是机械学院的一个副教授.他给我们展示了好几个用LabVIEW做的项目.譬 ...
- zeroclipboard实现多浏览器复制到粘贴板功能
zeroclipboard实现多浏览器复制到粘贴板功能(单个复制按钮和多个复制按钮) 为了更好的用户体验,现在很多网站中文本框的内容只需要点击复制按钮这样就能把内容复制到粘贴板了:出于兼容性的考虑,基 ...
- Android 之 获取地理位置及监听
第一步.添加权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> ...
- 微软BI 之SSRS 系列 - 如何实现报表标签的本地化 - 中文和英文的互换
SSRS 中并没有直接提供本地化的配置方式,因此在 SSRS 中实现本地化,比如有英文标题还有可选的中文标题,就需要通过其它的方式来解决. 比如默认是这样的英文标题 - 但是本地中方用户可能比较喜欢看 ...
- SQL Server配置支持中文
- 〖Linux〗在tmux同时使用bash和zsh
个人有两份tmux配置文件: ~/.tmux.conf # 使用zsh,主要是日常使用,zsh太好使用了 ~/.tmux.conf.bash # 使用bash,主要是Android编译使用 按照tmu ...