当点击单元格中的UILabel或UIImageView时,无法在prepareForSegue中获取indexPath.row的正确值,

时间:2014-08-08 09:05:20

标签: objective-c uitableview segue

我正在使用UITableView开发iOS App。

当点击单元格中的UILabel或UIImageView时,会调用segue并移动到另一个屏幕。

我正在写下面的代码,但是我无法在prepareForSegue中获得indexPath.row的正确值。该值始终为0.

- (void)goToDetail: (UITapGestureRecognizer *)sender{
    [self performSegueWithIdentifier:@"showDetail" sender:self];
    NSLog(@"aaa");
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        DetailViewController *detailViewController = [segue destinationViewController];
        detailViewController.article = _article[indexPath.row];
        NSLog(@"bbb%d",indexPath.row);
    }
}

NSLog表示如下。

2014-08-08 17:50:23.267 eleventhtest[27374:60b] bbb0
2014-08-08 17:50:23.269 eleventhtest[27374:60b] aaa

你能告诉我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

作为可能的选项之一,您可以在创建单元格时为label / imageView和手势识别器设置标记。标记与indexPath.row相同。 在goToDetail方法中,您可以将此标记分配给某个内部属性,然后在prepareForSegue中使用它。

答案 1 :(得分:0)

如果您在goToDetail方法中调用didSelectRowAtIndexPath并且从原型行连接到您的detailViewController,则会在goToDetail方法之前触发segue。

解决方案:直接从视图控制器转到您的detailViewController,并在[self performSegueWithIdentifier:@"showDetail" sender:self];方法中调用didSelectRowAtIndexPath

你也可以创建一个NSIndexPath属性并在didSelectRowAtIndexPath方法中设置值,然后segue将使用该属性而不是尝试访问[self.tableView indexPathForSelectedRow]。