1

我有一个UITableViewController有 5 个不同部分的,每个部分都包含一个单独的单元格。在第 1 部分中,我有一个UISegmentedControl默认情况下提供两个选项的部分 1 被选中,因此其余部分(其他 4 个)与第 1 部分相对应。但是,我遇到的问题是:能够切换到UITableView另一个当然,当在UISegmentedControl

我正在为这个项目使用故事板。

我知道如何实现这一点的问题已经被问了一千次,如果我使用常规视图控制器,我知道如何做到这一点,我是新手,UITableViewController这真的让我很难过。

我尝试过的事情:

No.1: 我尝试将所有内容一起删除UITableViewController并替换为主视图的正常ViewController和子UITableView视图。问题是 xcode 给了我一个错误,因为静态单元格需要 aUITableViewController才能工作,(不幸的是我正在使用静态单元格)。

No.2: I have tried to hide the cells with a conditional from the UISegmentedControlto only display the appropriate cells with the appropriate selection, but this did not work because I was not able to add my other sections & cells on top (as I would通常已经完成了常规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. 在表格视图的数据源方法(即numberOfSections, numberOfRowsInSection, cellForRowAtIndexPath)中,您可以为两种状态设置所有正确的数字和数据。

  3. 当分段控件发生变化时,您可以做两件事。就像之前建议的那样,要么你只是简单地reloadData,但你没有得到任何动画。或者你使用insertRowsAtIndexPaths:withRowAnimation:anddeleteRowsAtIndexPaths: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 回答
0

如果我是正确的,您需要使用 UISegmentedControl 在 2 个表视图之间切换。您可以使用 UIViewController 并向其中添加 2 个 UITableView,并将您的 UISegmentedControl 保留在表视图之外。那么可能您可以通过以下方法对其进行管理:

- (IBAction)segmentedControl:(id)sender {

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

    if (selectedSegment == 0)
    {
    //show Table1 and hide Table2
    // Reload Table1

    }
    else if (selectedSegment == 1)
    {
    //show Table2 and hide Table1
    // Reload Table2
    }

}

希望这可以帮助。

于 2013-07-18T06:32:40.550 回答