ChenYilong / CYLTabBarController

[EN]It is an iOS UI module library for adding animation to iOS tabbar items and icons with Lottie, and adding a bigger center UITabBar Item. [CN]【中国特色 TabBar】一行代码实现 Lottie 动画TabBar,支持中间带+号的TabBar样式,自带红点角标,支持动态刷新。【iOS13 & Dark Mode & iPhone XS MAX supported】
MIT License
6.92k stars 1.46k forks source link

`+plusChildViewController`样式下,选中了一次中间的 plusButton 之后,再点别的 tabItem ,中间不会变成 normal 的状态。 #112

Closed Onetaway closed 7 years ago

Onetaway commented 7 years ago

如题,就像其他普通的 tabbarItem 一样,比如选中的文字是红色,没选中的是灰色这样。

ChenYilong commented 7 years ago

这个原生就是支持的,Demo中就演示了,如何操作,详见:

https://github.com/ChenYilong/CYLTabBarController/blob/master/Example/Classes/View/CYLPlusButtonSubclass.m#L80

ChenYilong commented 7 years ago

最终发现是设置Delegate冲突的原因,为文档增加了README:

Q: 我的样式是点击 plusButton 后跳转到一个 ViewController,但是选中了一次中间的 plusButton 之后,再点别的 tabItem ,中间不会变成 normal 的状态。

A: 有两种情况会造成这个问题:

  1. 应该是你的 tabBar 设置了 delegate 了,你要是 tabBar 的代理没设置的话,默认会有这个 selected 状态切换的处理。你设置代理后,会覆盖我的行为。所以手动加上就好了。

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController*)viewController {
       [[self cyl_tabBarController] updateSelectionStatusIfNeededForTabBarController:tabBarController shouldSelectViewController:viewController];
    return YES;
    }
  2. plusButton 添加了自定义点击事件或者自定义手势,因为这样会造成点击事件冲突或手势冲突,当需要 pushViewController 的时候,这个库会自动的添加点击事件,你这里重新加了点击事件所以冲突了;

    在你项目的基础,把 plusButton 的点击事件取消掉,也就是 addTarget 这一行注释掉,手势事件也同理,应该就ok了

详见: https://github.com/ChenYilong/CYLTabBarController/commit/b741856e4a1d7c5cebd8b8c1fe478dda1a2d3a61