didSelectRowAtIndexPath和prepareForSegue实现

时间:2014-01-23 23:23:58

标签: ios objective-c didselectrowatindexpath

我有两种方法:

- (void)tableView: (UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
{
testNumber=indexPath.row;
    testNumber=testNumber+1;
    NSLog(@"Test number : %i",testNumber);
}

然后

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"testStart1"])
   {
    tViewController *tvc = [segue destinationViewController];
    tvc.testNumberTVC=testNumber;
   }
}

我还通过选择UITableView中的行来触发了一个segue。

我的问题是,当我选择一行时,prepareForSegue在didSelectRowAtIndexPath之前执行,因此不会传输testNumber的新值。

我想只在didSelectRowAtIndexPath完成或更好时才实现prepareForSegue: 仅使用didSelectRowAtIndexPath方法传递testNumber的值,从而删除prepareForSegue方法。

我看到很少有关于将数据从UITableView传输到DetailView但使用新的xCode 5的主题,当出现错误消息时,我真的不知道这是因为解决方案已过时或是否存在一个真正的错误是我的代码。

1 个答案:

答案 0 :(得分:1)

您可以在视图控制器之间创建segue,而不是从单元格选择中创建segue,并在storyboard中设置segue的标识符。然后你可以做这样的事情:

- (void)tableView: (UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
{
    testNumber=indexPath.row;
    testNumber=testNumber+1;
    NSLog(@"Test number : %i",testNumber);
    [self performSegueWithIdentifier:@"mySegueIdentifier" sender:self];
}

另一种选择是查看此链接here的答案。基本上你可以在prepareForSegue中获取单元格indexPath:

  UITableViewCell *cell = (UITableViewCell*)sender;
  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];