didSelectRowAt 索引的 indexPath 错误

Posted

技术标签:

【中文标题】didSelectRowAt 索引的 indexPath 错误【英文标题】:Wrong indexPath for didSelectRowAtIndex 【发布时间】:2013-10-25 11:12:09 【问题描述】:

我通过 JSON 解析产品 ID,然后将其推送到详细视图并放入 url 以解析有关所选产品的更多信息,但似乎 didSelectRowAtIndexPath 返回错误的 indexPath 因为每次我点击一行它不加载详细视图的产品获取最后检索的行的产品 ID。

例如,我显示了 5 行。我的逻辑正确解析每一行(第 1 行、第 2 行、第 3 行、第 4 行、第 5 行)的所有 ID。我知道点击第一行,因为我想获取链接到第 1 行的信息,但不是第 1 行的信息,而是详细视图获取解析第 5 行信息的命令,因为这是最后一个被解析然后显示的 id错误信息。

我不知道如何让didSelectRowAtIndexPath 方法获得正确行的正确信息。

这是我的didSelectRowAtIndexPath 代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UIStoryboard *iPhone = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    CJArtikelDetailViewController *artikelView = [iPhone instantiateViewControllerWithIdentifier:@"detail"];

    NSString *detail = [NSString stringWithFormat:@"%@", wareID];

    artikelView.productID = detail;

    [self.navigationController pushViewController:artikelView animated:YES];
    [neuheitenTableView deselectRowAtIndexPath:indexPath animated:YES];
    NSLog(@"IndexPath: %@", [indexPath description]);




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

    static NSString *neuheitenCell = @"neuheitenCell";
    CJHomeTableCell *cell = [tableView dequeueReusableCellWithIdentifier:neuheitenCell];

    /*
    NSNumber *preis = [[arrayArtikelPreis objectAtIndex:indexPath.row] objectForKey:@"preis"];
    NSMutableString  *test = [NSMutableString stringWithFormat:@"€ %@", preis];
    cell.artikelPreis.text = test;
      */

    NSString *imageString = [[arrayNeuheiten objectAtIndex:indexPath.row] objectForKey:@"bild"];
    //NSLog(@"BildURL: %@", imageString);
    NSURL *imageURL = [NSURL URLWithString:imageString];
    [cell.artikelImage setImageWithURL:imageURL placeholderImage:[UIImage imageNamed:@""]];

    NSDictionary *object = [arrayNeuheiten objectAtIndex:indexPath.row];
    //NSLog(@"%@", object);

    wareID = [object objectForKey:@"ware_id"];
    NSLog(@"Waren ID: %@", wareID);

    cell.artikelName.text = [object objectForKey:@"name"];
    cell.artikelHersteller.text = [object objectForKey:@"lieferant_name"];


    return cell;


我必须让方法以某种方式确定选择了哪一行,但我不知道如何在文档中找到有关它的信息。

提前感谢您的帮助!

【问题讨论】:

indexPath.row 对您不起作用? 这里的wareId是什么?您可以发布您为 wareId 赋值的代码吗 wareid 是产品 ID。我在 cellForRowAtIndexPath 分配它。我会把它添加到我的原始帖子中 @PratyushaTerli 编辑了我的原帖 所以您想将产品 id 传递给基于当前选定行的详细视图控制器吗? 【参考方案1】:

希望对你有帮助

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    UIStoryboard *iPhone = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    CJArtikelDetailViewController *artikelView = [iPhone instantiateViewControllerWithIdentifier:@"detail"];
    NSDictionary *object = [arrayNeuheiten objectAtIndex:indexPath.row];
    //NSLog(@"%@", object);
    //assign selected product id to wareId here and pass it to detail view controller it will work
    wareID = [object objectForKey:@"ware_id"];
    NSLog(@"Waren ID: %@", wareID);
    NSString *detail = [NSString stringWithFormat:@"%@", wareID];

    artikelView.productID = detail;

    [self.navigationController pushViewController:artikelView animated:YES];
    [neuheitenTableView deselectRowAtIndexPath:indexPath animated:YES];
    NSLog(@"IndexPath: %@", [indexPath description]);




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

    static NSString *neuheitenCell = @"neuheitenCell";
    CJHomeTableCell *cell = [tableView dequeueReusableCellWithIdentifier:neuheitenCell];

    /*
    NSNumber *preis = [[arrayArtikelPreis objectAtIndex:indexPath.row]   objectForKey:@"preis"];
    NSMutableString  *test = [NSMutableString stringWithFormat:@"€ %@", preis];
    cell.artikelPreis.text = test;
     */

    NSString *imageString = [[arrayNeuheiten objectAtIndex:indexPath.row] objectForKey:@"bild"];
    //NSLog(@"BildURL: %@", imageString);
    NSURL *imageURL = [NSURL URLWithString:imageString];
    [cell.artikelImage setImageWithURL:imageURL placeholderImage:[UIImage imageNamed:@""]];

    //comment out wareId value assigning code here
    NSDictionary *object = [arrayNeuheiten objectAtIndex:indexPath.row];//commemted this line by mistake
    //NSLog(@"%@", object);

    //wareID = [object objectForKey:@"ware_id"];
    //NSLog(@"Waren ID: %@", wareID);

    cell.artikelName.text = [object objectForKey:@"name"];
    cell.artikelHersteller.text = [object objectForKey:@"lieferant_name"];


    return cell;


【讨论】:

我做的有点不同。我添加了第二个 NSDictionary 因为我需要 cell.artikelName.text 和 cell.artikelHersteller.text 的对象。请为其他人编辑您的代码。我不想这样做 :) 再次感谢! NSDictionary *object = [arrayNeuheiten objectAtIndex:indexPath.row]; 错误地评论了这一行。现在编辑请检查它 我很高兴能帮上忙 :)

以上是关于didSelectRowAt 索引的 indexPath 错误的主要内容,如果未能解决你的问题,请参考以下文章

为自定义单元格调用 didSelectRowAt 索引

带有 didselectrowAt 索引的 UiTableview 排序返回先前的选择?

iOS:didSelectRowAt 索引路径仅适用于第二次点击

如何修复 didSelectRowAt 返回的错误 indexPath?

didSelectRowAt 更改所有行中的值

无法让 didSelectRowAt 为 TableView 工作