【问题标题】:Can not get correct value of indexPath.row in prepareForSegue when UILabel or UIImageView in a cell is tapped,当点击单元格中的 UILabel 或 UIImageView 时,无法在 prepareForSegue 中获取 indexPath.row 的正确值,
【发布时间】:2014-08-08 17:19:31
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: objective-c uitableview segue


    【解决方案1】:

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

    【讨论】:

    • 非常感谢。我可以根据您的建议解决问题。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多