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

我想点击tabbar的某个按钮之后 想直接push到另一个页面,是要破坏代码的封装性么.... #286

Closed beydeng closed 5 years ago

beydeng commented 6 years ago

Base Info for this issue

  1. Version:v1.13.1
  2. Language:Objective-C
  3. iOS System Version:iOS10
  4. Prototype(是否是真机):YES
  5. Issue Type:Crash、Bug、Enhancement(希望能支持一个新需求)、Q-A

1. How to repeat the problem.

2. Please help me in this way.

3. Here is a Demo.

4. Here is my Debug log

谢谢

ChenYilong commented 6 years ago

不用破坏,在appdelegate里示例代码演示了,如何使用代理方法来拦截点击事件。

ameue commented 5 years ago

@ChenYilong 你好,假设TabBarController有3TabBarItem,当前选中第一个TabBarItem,这个页面中有一个按钮,点击按钮push一个页面,当这个页面点击返回按钮或者用手势返回后,TabBarController已经选中的是第三个TabBarItem,这样可以吗

ChenYilong commented 5 years ago

现在的demo已经演示了,你进最新demo,点击鱼塘tab,进cell的二级,然后就有提示。会push到别的tab的二极页面。

ChenYilong commented 5 years ago

@ChenYilong 你好,假设TabBarController有3TabBarItem,当前选中第一个TabBarItem,这个页面中有一个按钮,点击按钮push一个页面,当这个页面点击返回按钮或者用手势返回后,TabBarController已经选中的是第三个TabBarItem,这样可以吗

不需要破坏封装性,我给了API可以实现这个功能。

ameue commented 5 years ago

@ChenYilong 感谢回复 demo一种情况是(有plus button):在第二tab进入二级二级页面后,点击页面才做处理,这个时候手势返回的时候还是选中的第二个tab 第二种情况(没有plus button):在第二tab进入二级页面后,点击页面,pop-选中另外一个tab-再push一个页面,这种情况,原生的也可以处理。 我想咨询的是,在第二tab进入二级页面后,在这个二级页面点返回,或者是手势返回后,都已经选中另外一个tab。

ChenYilong commented 5 years ago

你看下demo实现,这个可以。有popSelect接口。index 传入对应的值:

效果: TabA --(push)-->A2 --(popSelect)-> TabB --(在popSecect的 Callback 中执行push)--> B2

效果就是 B2 点击返回,回到TabB,点击TabA所在的TabBarItem,显示TabA,而非A2。

用法如下:

lottie005e

在A的二级页面,Push到B的二级页面,在从B返回时回到的是B的根页面,再点击A页面,也是根页面。


 [self cyl_popSelectTabBarChildViewControllerAtIndex:3 completion:^(__kindof UIViewController *selectedTabBarChildViewController) {
        CYLMineViewController *mineViewController = selectedTabBarChildViewController;
        @try {
            [mineViewController testPush];
        } @catch (NSException *exception) {
            NSLog(@"🔴类名与方法名:%@(在第%@行),描述:%@", @(__PRETTY_FUNCTION__), @(__LINE__), exception.reason);
        }
    }];
ameue commented 5 years ago

@ChenYilong 感谢你的回复 这样是能实现的,原生的tabbar也可以。 可能我的表述不清楚,我的想法是,在TabA --(push)-->A2(a2 是TabB的模块里面的页面)后,没有再次点击页面执行testPush,实际上tabbar已经选中了TabB,在页面上实际看到的效果是,如果在A2使用手势返回后,看到的效果是TabB已经选中

ChenYilong commented 5 years ago

有没有对标的app效果,QQ或者微信?这样好理解。

ameue commented 5 years ago

UU加速器,启动APP后,点击‘全部游戏’tab,然后点击页面右上角的‘搜索按钮’,然后点击页面上的‘王者荣耀’,进入下一个页面后,再用手势返回,看到的结果是‘加速’tab选中了。

ChenYilong commented 5 years ago

UU Game Booster by NetEase Games https://itunes.apple.com/nz/app/uu-game-booster/id1187805308?mt=8

ameue commented 5 years ago

https://itunes.apple.com/cn/app/%E7%BD%91%E6%98%93uu%E5%8A%A0%E9%80%9F%E5%99%A8-%E4%B8%93%E4%B8%9A%E7%9A%84%E6%89%8B%E6%B8%B8%E5%8A%A0%E9%80%9F%E5%B7%A5%E5%85%B7/id1319788668?mt=8

ChenYilong commented 5 years ago

在点击王者荣耀按钮时,执行popSelect index的值1,然后再push新页面。这样是否可行。

ameue commented 5 years ago

不行,点击返回和手势返回,tabbar消失了