Segue 不传递正确的行的索引路径总是第 0 节

Posted

技术标签:

【中文标题】Segue 不传递正确的行的索引路径总是第 0 节【英文标题】:Segue not passing correct indexpath of row always section 0 【发布时间】:2014-03-29 04:38:00 【问题描述】:

我使用的是分段的 tableView。如果我单击 tableview 总是将 indexpath 0 传递给详细视图控制器。如果我单击第二行但 indexpath 传递总是传递 0。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    if ([segue.identifier isEqualToString:@"toNext"]) 
    detailTableViewController *detailVC = [segue destinationViewController];
    [detailVC setkMessageDict:(NSDictionary*)[nArray objectAtIndex:[self.mytableView indexPathForSelectedRow].section]];

代码有什么问题?

【问题讨论】:

有多少个部分?也许你的意思是行而不是部分。 我有 4 个部分..总是返回 0。@KudoCC @gagarwal 你能举个例子吗? @gagarwal 请用我的代码编辑 【参考方案1】:

您需要在您的序列中创建 index-path 对象,例如:-

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    [self performSegueWithIdentifier:@"toNext" sender:indexPath];

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    NSIndexPath *indexPath = [self.tableview indexPathForSelectedRow];
    NSLog(@" indexPath row %d",indexPath.row);
    NSLog(@" indexPath row %d",indexPath.section);
    detailTableViewController *detailVC = [segue destinationViewController];
    [detailVC setJobDetailDict:(NSDictionary*)[nArray objectAtIndex:indexPath.row];



【讨论】:

【参考方案2】:

是的,Ramdy,是对的。您需要提及行而不是部分。 你用这个....

[detailVC setJobDetailDict:(NSDictionary*)[nArray objectAtIndex:[self.mytableView indexPathForSelectedRow].row]];

【讨论】:

【参考方案3】:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    if ([segue.identifier isEqualToString:@"toNext"]) 
    NSIndexPath *selectedIndex= [self.mytableView indexPathForSelectedRow];
    NSDictionary *myDic=(NSDictionary*)[nArray objectAtIndex:indexpath.section];
    detailTableViewController *detailVC = [segue destinationViewController];
    [detailVC setkMessageDict:(NSDictionary*)[[myDic objectForKey:@"locations"] objectAtIndex:selectedIndex.row]];

请检查您的数组是否具有来自您的部分表格视图的正确数据,否则将 NSDictionary 值添加到数组并将其传递给 detailTableViewController 然后尝试。问题是您没有在此处传递部分的索引路径。希望它对您有所帮助.

【讨论】:

还是一样。你能再给点样品吗 请在 Skype 中加我。知道我的 id 了吗?【参考方案4】:

尝试使用 API 更新选定的行 indexPath:

selectRowAtIndexPath:animated:scrollPosition:

在以下 UITableViewDelegate API 中:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

【讨论】:

【参考方案5】:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    NSString * currentRow = [NSString stringWithFormat:@"%ld",(long)indexPath.row];  // Declare this row variable in .h file
    NSString * currentSection = [NSString stringWithFormat:@"%ld",(long)indexPath.section];  // Declare this section variable in .h file


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    if ([segue.identifier isEqualToString:@"toNext"]) 
    detailTableViewController *detailVC = [segue destinationViewController];    
    detailVC.PassRow = currentRow;
    detailVC.PassSection = currentSection;

【讨论】:

如果我改变行它只通过每个部分的所有第一行。 @Ramdy PassRow 和 PassSection 是什么属性? @Ramdy 必须在detailView中声明为字符串? 它只是 NSString ,在 detailTableViewController 中声明。 来自 prapareForSegue,我们只发送行和部分。只需使用 nslog("%@ %@",pas-s-row,passsection);要打印值,只需检查一下,在此之前这些 pas-s-row , passsection 应该是一个属性并合成。【参考方案6】:

最接近该问题的答案是 Nitin Gohel。但是如果你在Storyboard中将UITableViewCell连接到detailTableViewController,他的方法也是错误的。

在这种情况下,prepareForSegue 方法提供了正确的UITableViewCell 作为存储在sender 参数中的参数。这完全由UITableView 处理。所以正确的代码是:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([sender isKindOfClass:[UITableViewCell class]] && [segue.identifier isEqualToString:@"toNext"])
    
        NSIndexPath *indexPath = [self.mytableView indexPathForCell:sender];

        detailTableViewController *detailVC = [segue destinationViewController];
        [detailVC setJobDetailDict:(NSDictionary*)[nArray objectAtIndex:indexPath.row];
    

不要忘记检查正确的 segue 名称。

【讨论】:

感谢您的回答。仍然相同的问题始终传递每个部分的第一个单元格行值

以上是关于Segue 不传递正确的行的索引路径总是第 0 节的主要内容,如果未能解决你的问题,请参考以下文章

objectAtIndex 没有在 segue 中传递选定的行

分组表视图中单元格的索引路径

UITableview返回不正确的索引路径行[重复]

滚动表格视图时,我需要在表格视图顶部传递的行

获取从VBA中的段落获得的行的第一个单词的索引号

获取将在 UITableView 中插入的行的索引