0

複数のサブビューを持つUIViewControllerを作成しました。すべてのサブビューに切り替えるために、セグメント化されたコントロールを追加しました。画面は次のようになります。

ここに画像の説明を入力してください

2番目のビューでは、このコード行を使用して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を使用できます。ただし、この方法を使用すると、アニメーションは取得されません。

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;
   }
}
于 2013-01-22T14:46:30.317 に答える