如何使用分段的UITableView实现didSelectRowAtIndexPath方法

时间:2013-09-12 00:31:03

标签: objective-c uitableview didselectrowatindexpath

我一直在使用分段的UITableView实现一个应用程序。在tableview中,我使用了一个名为sections的数组来存储不同的类数组,并在不同的部分显示它们。另一方面,我还使用了一个名为headers的数组来存储节标题'名称。例如,在"工作日"在本节下面的表ViewCell中,有七个单词,周日到周六。在MainViewController中:

-(void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableArray *weekday=[[NSMutableArray alloc]init];
    NSMutableArray *traffic=[[NSMutableArray alloc]init];

    for (NSArray *sec_ary in listData) {
    NSString *class=[[sec_ary valueForKey:@"vocabulary_list"]valueForKey:@"Class"];
    if ([class isEqualToString:@"WEEKDAY"]) {
       [weekday addObject:[[sec_ary valueForKey:@"vocabulary_list"]valueForKey:@"Vocabulary"]];
    }else if ([class isEqualToString:@"TRAFFIC TOOLS"]){
        [traffic addObject:[[sec_ary valueForKey:@"vocabulary_list"]valueForKey:@"Vocabulary"]];
    }
    sections=[[NSArray alloc ]initWithObjects:weekday,traffic,nil];
    headers=[[NSArray alloc]initWithObjects:@"WEEKDAY",@"TRAFFIC TOOLS",nil];
}

在这个App中,我还实现了导航控制器,它可以让用户在didSelectRowAtIndexPath方法中查看详细信息。代码如下:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
      AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
      ContentViewController *content= [[ContentViewController alloc] initwithIndexPath:indexPath];
      [delegate.navController1 pushViewController:content animated:YES];
      [tableView deselectRowAtIndexPath:indexPath animated:YES];  
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
      static NSString *TableIdentifier = @"tableidentifier"; / 
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableIdentifier]; 

      if (cell == nil) { 
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle          reuseIdentifier:TableIdentifier] autorelease];
      } 
      cell.textLabel.text = (NSString*)[[self.sections objectAtIndex:indexPath.section]objectAtIndex:indexPath.row];
      cell.textLabel.font = [UIFont boldSystemFontOfSize:15];

      return cell; 
}

在ContentViewController中:

-(void)viewDidLoad{
      [super viewDidLoad];
      AppDelegate *delegate=(AppDelegate*)[[UIApplication sharedApplication]delegate];
      NSDictionary *voc_list=[delegate.vcblr objectAtIndex:index.row];
      //extracting the voc_list dictionary to show infomation.....
}

我想知道为什么每个部分都会从voc_list的开头加载信息。也就是说,tableViewCell不响应正确的详细内容。谁能为我提供解决它的想法?

1 个答案:

答案 0 :(得分:0)

  

我想知道为什么每个部分都会从voc_list开始加载信息。

由于viewDidLoad方法的代码会忽略index.section,因此请仅关注index.row。您需要根据delegate.vcblrsection来确定传递给row的索引;确切的计算取决于数据的结构,即每个部分中有多少行。

注意:使用AppDelegate在视图控制器之间共享数据不是一个好主意。请考虑在单独的模型类and make that class a singleton中分离出您的数据。