【问题标题】:Segue equivalent of didSelectRowatIndexPath?Segue 相当于 didSelectRowatIndexPath?
【发布时间】:2014-09-11 08:42:13
【问题描述】:

在 SO 上进行了大量搜索后,我还没有找到似乎不是意见争论的解决方案。以前在代码中,我可以使用以下代码实现我想要的结果(长途是的......)

if(indexPath.section == 0 && indexPath.row == 0) {
DetailViewController *dvc = [[[DetailViewController alloc] init] autorelease];
dvc.detail = data.city1;
[self.navigationController pushViewController:dvc animated:YES];

}

if(indexPath.section == 0 && indexPath.row == 1) {
DetailViewController *dvc = [[[DetailViewController alloc] init] autorelease];
dvc.detail = data.city2;
[self.navigationController pushViewController:dvc animated:YES];

等等,为每个单元格提供一个特定的操作,以便在选择时执行并将一个数组传递给下一个视图。我所有的研究看起来都像是风格和观点的差异,以及将 segue 连接到视图控制器或特定单元格以及在 didSelectRow 或 prepareForSegue 之间使用哪种方法之间的不一致。以下代码与情节提要中的一个单元格挂钩,因此该部分中的每个单元格现在将相同的数据传递给下一个表格视图。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"shows"])
{
    ShowsList *viewController = segue.destinationViewController;
    viewController.detail = data.city1;
}

}

我的问题是如何处理 prepareForSegue 中的 indexPath.row 以实现我以前可以在代码中执行的操作并根据选择的行传递特定数组?我尝试恢复到失败的故事板和代码的混合,创建多个自定义单元格,这似乎违背了“无混乱”方法的整个目的,以及不同答案的多种变体。 Again, how would I say "Hey, when this is chosen pass this info, when this is chosen pass this info...?"使用 prepareForSegue 方法

【问题讨论】:

  • @BJHomer 我不确定它是否重复,我之前检查过它,但似乎不是我想要的。也许我没有正确地澄清自己或者我误解了。使用该方法,我没有看到我在哪里声明选择特定小区时要发送的数据,当我“即插即用”时,它会抛出错误,这不是我所要求的。使用 didSelectRow 会引发错误,使用 prepareForSegue 我无法根据选择的单元格声明要发送的数据。选择city1,加载这个plist,选择city2加载这个其他plist。答案不在您的建议中
  • 据我了解,您的问题基本上是“我如何确定在 prepareForSegue 中选择了哪一行,就像在 didSelectRowForIndexPath 中一样”。链接的问题回答了这个问题。你还有什么我不明白的问题吗?
  • @BJHomer 我认为更多的是我没有以适当的方式传达我正在寻找的东西。我相信我已经说明了我对链接问题以及原始问题/漫谈的目标和问题。如果我的术语让您失望,请再次尝试简单的术语。 City1 位于 index0 中,city2 位于 index1 中。 In prepareForSegue how would i say "When city1 is chosen pass plistA to the next view, when city2 is chosen pass plistB to the next view"
  • 与您在 -didSelectRowAtIndexPath 中所做的完全相同;唯一的区别是 segue 为您分配目标控制器。您已将此问题表述为将 -prepareForSegue 与 -didSelectRowAtIndexPath 进行比较。当你开始使用 segues 时,根据行号选择 plist 的逻辑不会改变。

标签: ios uitableview storyboard xcode5 segue


【解决方案1】:

prepareForSegue:sender: 中的 sender 参数将是您选择的单元格,因此您可以像这样获取 indexPath,

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender {
       NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
       // use the indexPath to query your array
}

【讨论】:

  • 谢谢,这就是我需要朝着正确的方向前进,而不是插上插头,然后祈祷、猜测和挑选现有代码,找出它为什么不起作用。
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多