我正在使用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
你能告诉我如何解决这个问题吗?
答案 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]。