1

5 つの異なるセクションがUITableViewControllerあり、各セクションには個別のセルが含まれています。セクション 1 には、デフォルトでセグメント 1 が選択されているため、残りのセクション (他の 4 つ) はセグメント 1 に対応する 2 つのオプションを提供するがUISegmentedControlあります。UITableViewもちろん、セグメント 2 がUISegmentedControl

このプロジェクトではストーリーボードを使用しています。

これを達成する方法についての質問が何千回も寄せられていることを知っています。通常のビュー コントローラーを使用していた場合は、これを行う方法を知っていUITableViewControllerます。

私が試したこと:

No.1:UITableViewControllerまとめて 削除して、メインビューにノーマルViewControllerとサブアを差し替えてみました。UITableViewそれに関する問題は、静的セルが機能するために が必要なため、xcode によってエラーが発生したことUITableViewControllerです (残念ながら、静的セルを使用しています)。

No.2:条件付きでセルを非UISegmentedControl表示にして、適切なセルのみを適切に選択して表示しようとしましたが、他のセクションとセルを上に追加できなかったため、これは機能しませんでした (通常は定期的に行っていますUIViewController

これは、方法 2 を試すために使用したコードです。

- (IBAction)segmentedControl:(id)sender {

    UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
    NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;

    if (selectedSegment == 0)
    {
        upick= 0;
        self.lengthCell.hidden=NO;
        self.widthCell.hidden=NO;
        self.depthCell.hidden=NO;
        self.flowCell.hidden=YES;

    }
    else if (selectedSegment == 1)
    {
        upick =1;
        self.lengthCell.hidden=YES;
        self.widthCell.hidden=YES;
        self.depthCell.hidden=YES;
        self.flowCell.hidden=NO;
    }

}

No.3:ネットで膨大な時間の調査を行っていますが、探している正確な結果を見つけることができないようです。ほとんどの場合、 a を使用してこれを行う方法が示されていUIViewControllerますが、この特定のケースでは手順が異なります。

行き詰まっているので、ここからアドバイスと全体的な方向性を教えていただければ幸いです。みんなありがとう!

4

2 に答える 2

3
  1. 必要なすべてのセルをテーブル ビュー コントローラーで使用できるようにします。

  2. テーブル ビューのデータソース メソッド (つまりnumberOfSectionsnumberOfRowsInSectioncellForRowAtIndexPath) では、2 つの状態のすべての正しい数値とデータを設定できます。

  3. セグメント化されたコントロールが変更されると、2 つのことができます。前に提案されたように、単純reloadDataに を実行しますが、アニメーションは表示されません。または、 と を使用insertRowsAtIndexPaths:withRowAnimation:deleteRowsAtIndexPaths:withRowAnimation:てアニメーション効果を取得します。

たとえば、ケース 1 ではセクション 1 ~ 2 を、ケース 2 ではセクション 3 ~ 6 を示します (セクション 0 が一番上のセクションです)。各セクションには 2 つの行があります

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
   return _control.selectedSegmentIndex == 0 ? 3 : 4;
}

- (NSInteger)tableView:(UITableView *)tableView 
      numberOfRowsInSection:(NSInteger)section {
   return section == 0 ? 1 : 2;
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
      cellForRowAtIndexPath:(NSIndexPath *)indexPath   {
   // .. the usual boilerplate
   if (_control.selectedSegmentIndex == 0) { /* configure cell */ }
   else { /*do the same for the other case */ }
   return cell;
}

-(void)segmentedControlDidChange:(UISegmentedControl*)sender {
    NSIndexSet *indexes;
    [_tableView beginUpdates];
    if (sender.selectedSegmentIndex == 0) {
        indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,4)];
        [_tableView deleteSections:indexes 
                  withRowAnimation: UITableViewRowAnimationFade];
        indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,2)];
        [_tableView insertSections:indexes 
                  withRowAnimation: UITableViewRowAnimationFade];
       [_tableView reloadSections:indexes 
                  withRowAnimation: UITableViewRowAnimationNone];
    }
    else {
         // do the reverse
    }
    [_tableView endUpdates];
}
于 2013-07-18T06:24:48.950 に答える