0

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

在此处输入图像描述

在第二个视图中,我添加了一个 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];

所以画面会是这样的。。

在此处输入图像描述

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

在此处输入图像描述

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

谢谢,

关联

4

1 回答 1

1

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

控件的段像数组一样编号,从 0 开始。在您的操作方法中,您测试您感兴趣的段(在本例中为段 0)并显示或隐藏工具栏。如果您更喜欢滑动动画,您也可以在屏幕外对其进行动画处理。

如果您不担心留下工具栏以供以后重用,您可以在您的操作方法中使用 removeFromSuperview ;但是如果您使用此方法,您将无法获得动画。

使用核心动画隐藏它的快速示例:

-(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;
   }
}
于 2013-01-22T14:46:30.317 回答