如何在分段点击上隐藏UItoolbar

时间:2013-01-22 13:13:14

标签: objective-c uitableview uiview uiviewcontroller uitoolbar

我创建了一个包含多个子视图的UIViewController。要切换到所有子视图,我添加了一个分段控件..屏幕看起来像这样..

enter image description here

在第二个视图中,我添加了一个UIToolbar,使用这行代码..

    toolbar = [UIToolbar new];
    toolbar.barStyle = UIBarStyleDefault;
    [toolbar sizeToFit];
    toolbar.frame = CGRectMake(0, 0, 800, 40);

    UIBarButtonItem *filterByClass = [[UIBarButtonItem alloc] initWithTitle:@"A" style:UIBarButtonItemStyleBordered target:self action:@selector(goToFilteredByClass:)];

    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];

    NSArray *buttonItems = [NSArray arrayWithObjects:filterByClass, spacer, nil];
    [toolbar setItems:buttonItems animated:NO];

所以屏幕看起来像这样..

enter image description here

当我回到A段时,这是我的屏幕..

enter image description here

然后数据被工具栏覆盖..我想删除它,因为段A没有工具栏..有没有办法解决这个问题..?

谢谢,

链接

1 个答案:

答案 0 :(得分:1)

在视图控制器中设置一个操作,并让分段控件在其“值更改”事件触发时调用该操作。

控件的段编号类似于数组,从0开始。在您的操作方法中,您将测试您感兴趣的段(在本例中为段0)并显示或隐藏工具栏。如果您喜欢滑动动画,也可以在屏幕外设置动画。

如果您不担心以后再离开工具栏,可以在动作方法中使用removeFromSuperview;但是如果使用这种方法,你就不会得到动画。

使用Core Animation隐藏它的快速示例:

-(IBAction)segmentedControlValueChanged:(UISegmentedControl *)sender
{

   switch (sender.selectedSegmentIndex) {
      case 0:
         // A was pressed, so hide the toolbar
         [UIView animateWithDuration:0.2
                 animations: ^(void) { toolbar.alpha = 0.0; }];
         break;
      case 1:
         // B was pressed so show the toolbar
         [UIView animateWithDuration 0.2
                 animations: ^(void) { toolbar.alpha = 1.0; }];
         break;
   }
}