当hidesBottomBarWhenPushed为“TRUE”时,如何隐藏自定义标签栏按钮

时间:2012-06-27 12:00:05

标签: ios ios5 uitabbarcontroller

我正在使用Tito的代码片段向我的标签栏添加自定义按钮: https://github.com/tciuro/CustomTabBar

(对UITabbarController进行子类化并使用

添加自定义按钮
// .. created a UIButton *button
[self.view addSubview:button];

这适用于我的基于故事板的应用程序,除了导航控制器中的子视图的情况,启用了“隐藏推杆底部栏”选项。 这会按照承诺隐藏标签栏,但不会隐藏自定义按钮。 似乎按钮应作为子视图添加到标签栏本身? 我尝试了这个丑陋的代码,甚至没有显示按钮:

for(UIView *view in self.view.subviews)
{
    if([view isKindOfClass:[UITabBar class]])
    {
        [view addSubview:button];
        break;
    }
}

有什么想法吗?

更新 我的解决方案 在我的ApplicationDelegate中,我定义了以下方法,我在viewWillAppear或viewWillDisappear方法中随时调用这些方法:

-(void)hideCenterButton:(BOOL)animated
{
    if(animated){

    [UIView animateWithDuration:0.3
                          delay:0.0f
                        options:UIViewAnimationCurveLinear
                     animations:^{
                         CGRect frame = self.centerButton.frame;
                         frame.origin.x = -100;
                         self.centerButton.frame = frame;
                     }
                     completion:^(BOOL finished){
                     }];
    }
}

-(void)showCenterButton:(BOOL)animated
{
    if(animated){

    [UIView animateWithDuration:0.35
                          delay:0.0f
                        options:UIViewAnimationCurveLinear
                     animations:^{
                         CGRect frame = self.centerButton.frame;
                         frame.origin.x = (self.view.superview.frame.size.width / 2) - (self.centerButton.frame.size.width / 2);
                         self.centerButton.frame = frame;
                     }
                     completion:^(BOOL finished){
                     }];
    }
}

我必须将动画的持续时间设置为0.35秒才能获得与标签栏协调的平滑效果。

4 个答案:

答案 0 :(得分:1)

处理此问题的一种简单方法是在文件的.h中创建按钮实例。

UIButton *customTabButton;

在push上调用hides bottom bar时,将button属性设置为hidden,如果底栏显示,则在其他视图中再次重置它。

    shareFbButton.hidden=YES;

您可以检查这是所有文件的viewDidLoad,并根据需要放置此行代码,以确保您显示按钮并将按钮隐藏在您需要的所有页面上。

 if(self.tabBarController.tabBar.isHidden){

 // set or reset the custom button visibility here 
}

这是一种方式。

答案 1 :(得分:1)

为什么不将按钮作为标签栏的一部分。

AppDomain.ProcessExit
一切都会解决。干杯!

答案 2 :(得分:0)

选中this一个,在UITabBar上添加一个按钮。使用hidesBottoBarWhenPushed查看它是否有效。

答案 3 :(得分:0)

我认为有两种方法可以解决这个问题。

1)尝试将按钮放入旧顶视图控制器上方的视图和按下的新顶视图控制器下方的标签栏BUT。

2)在按下新视图控制器时为按钮设置动画。

第一个将需要与iOS专有视图层次结构混淆,该层次结构未记录,不受支持且可能随时更改。

第二个问题是让动画看起来足够流畅,让用户不要注意。它并不完全是表现完美的问题,只是恰当地表现出来。

我个人会推荐一个按钮消失的动画(将其动画为α的动画为0),并根据你的视图控制器是否出现在标签栏上而重新出现。

导航动画是(我相信)0.3秒。如果按钮位于标签栏的中间,您可能希望它不可见,因为视图控制器中的动画到达它(如果不是更快),因此可以使用0.1到0.15秒之间的动画来为其设置动画。 / p>

现在这并不会使按钮的行为与标签栏完全相同,但由于转换的速度太快,对用户来说真的是不明显的。

现在只是提出一个问题让你问自己。为什么需要推动与标签栏重叠的视图控制器?为什么比呈现模态视图控制器更可取/更必要?如果你能够强烈反对它,请坚持下去,祝你好运,如果没有必要,你可以用模态视图控制器获得你想要的体验。