didSelectRowAtIndexPath 和 prepareForSegue 实现

Posted

技术标签:

【中文标题】didSelectRowAtIndexPath 和 prepareForSegue 实现【英文标题】:didSelectRowAtIndexPath and prepareForSegue implementation 【发布时间】:2014-01-23 23:23:58 【问题描述】:

我有两种方法:

- (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;
   

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

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

我只想在 didSelectRowAtIndexPath 完成或更好时才实施 prepareForSegue: 仅使用 didSelectRowAtIndexPath 方法传输 testNumber 的值,因此删除 prepareForSegue 方法。

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

【问题讨论】:

只是一个建议,您可以使用testNumber++; 而不是testNumber = testNumber+1;,它会完成同样的事情。 【参考方案1】:

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

- (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];

【讨论】:

我的 segue 已经在故事板中并且正在工作,但我无法将 testNumber 值从 TableView 传递到 DetailView。 对,因为 prepareForSegue 在 didSelectRowAtIndexPath 之前被调用。 没错。您是否有在 didSelectRowAtIndexPath 中传递值的想法? 我刚刚尝试了这些新的代码行。 testNumber 已成功传输,但我无法使用它获取 indexPath.row。它始终为 0。

以上是关于didSelectRowAtIndexPath 和 prepareForSegue 实现的主要内容,如果未能解决你的问题,请参考以下文章

didSelectRowAtIndexPath 与自定义单元格

didselectrowatindexpath,在 Tableview 中选择和取消选择行

表视图动画和手势 - 覆盖 didSelectRowAtIndexPath

didSelectRowAtIndexPath 只被调用一次

让 didSelectRowAtIndexPath 转到名为“MainStoryboard”和“MainStoryboardiPad”的 UIStoryboard

UITableView didSelectRowAtIndexPath 从未调用