• 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操作

  • 相关阅读:
    软件工程课后作业3:如何返回一个整数数组中最大子数组的和
    软件工程课后作业2:四则运算题目扩展:可指定题目数量并且支持真分数运算
    软件工程课后作业1:三十道四则运算题目
    团队作业3返回整数数组中最大子数组的和(多个数组)
    求一个二维数组所有子数组和的最大值(郭少周,陈泽)
    郭少周和陈泽两人合作课堂练习和课下作业
    学生成绩查询系统个人NABCD
    返回一个整数组的最大子数组和
    个人项目3
    返回一个二维整数组中最大子数组的和
  • 原文地址:https://www.cnblogs.com/isItOk/p/7281426.html
Copyright © 2020-2023  润新知