0

我有一个包含两个部分的 tableView 的视图控制器。第 1 节只有一行,第 2 节有一些没有行数限制的数组。

当我单击第 1 节中的单元格时,我有一个 pickerView 出现在操作表中。无论我在我的 pickerView 上选择什么组件,都会成为第 1 节单元格上的标题。

现在我的问题,

我的 tableView 第 2 节的内容可以依赖第 1 节中单元格的标题文本吗?

例如:

if Section 1's text is = "String A", Section 2's contents should be = "Array A"
if Section 1's text is = "String B", Section 2's contents should be = "Array B"
if Section 1's text is = "String C", Section 2's contents should be = "Array C"
if Section 1's text is = "String D", Section 2's contents should be = "Array D"

等等...

另外,我希望 tableView 更新其内容,因为我用所需的字符串关闭了 pickerView。非常感谢一些示例代码/参考。

4

2 回答 2

0

一个好的解决方案是创建一个枚举变量来存储用户的选择,然后使用它来确定表格视图的内容。这是一些示例代码:

typedef enum { SelectionA, SelectionB, SelectionC } Selection;

@interface MyViewController : UITableViewController (UITableViewDataSource, UITableViewDelegate)

@property (nonatomic) Selection selection;
@property (nonatomic, strong) NSMutableArray *arrayA;
@property (nonatomic, strong) NSMutableArray *arrayB;
@property (nonatomic, strong) NSMutableArray *arrayC;

@end


@implementation MyViewController

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  NSInteger num = 0;
  if(section==0) {
    num = 1;
  }
  else {
    switch(self.selection)
    {
       case SelectionA: num = [self.arrayA count]; break;
       case SelectionB: num = [self.arrayB count]; break;
       case SelectionC: num = [self.arrayC count]; break;
    }
  }

  return num;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  NSString *cellText = nil;
  if(indexPath.section==0) {
    switch(self.selection)
    {
       case SelectionA: cellText = @"String A"; break;
       case SelectionB: cellText = @"String A"; break;
       case SelectionC: cellText = @"String A"; break;
    }
  }
  else {
    switch(self.selection)
    {
       case SelectionA: cellText = [self.arrayA objectAtIndex:indexPath.row]; break;
       case SelectionB: cellText = [self.arrayA objectAtIndex:indexPath.row]; break;
       case SelectionC: cellText = [self.arrayA objectAtIndex:indexPath.row]; break;
    }
  }

  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
        cell = [[UITableViewCell alloc]
           initWithStyle:UITableViewCellStyleDefault
           reuseIdentifier:CellIdentifier];
  }

  cell.textLabel.text = cellText;
}

@end
于 2013-04-01T19:51:39.060 回答
0

设置第 1 节的标题

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
   UITableViewCell *cell = (UITableViewCell *)sender.superview;
   cell.textLabel.text = [NSString stringWithFormat:@"%@",[self.listOfPickerData objectAtIndex:row]];

    [self customeMethod];
  [self.tabelView reloadData];
}

为您的阵列基于选定的派克视图的行

-(void)customeMethod
{
    int row = [repeatPickerView selectedRowInComponent:0];
    self.selectedRowFromPicker = [repeatPickerData objectAtIndex:row];

   if([self.selectedRowFromPicker isEqualToString:@"piker row 1 "])
   {
     // NSArray *myArray1......
   }
   eles if([self.selectedRowFromPicker isEqualToString:@"piker row 2 "])
   {
     // NSArray *myArray2......
   }
   else
   {
     // NSArray *myArray3......
   }
}
于 2013-04-01T19:55:06.690 回答