prepareForSegue与tableview中的自定义Cell

时间:2014-10-23 13:14:28

标签: ios uitableview segue

我有一个带有listview的控制器,其中包含一个自定义单元格。

我已经从单元格创建了一个模态segue到下一个控制器,我为这个segue命名,但是当我点击单元格时,prepareForSegue没有被调用。

我可以使用didSelectRowAtIndexPathperformSegueWithIdentifier,但我必须从我点击的单元格向下一个控制器发送数据。

知道为什么没有调用prepareForSegue?或者如何使用其他方法将数据发送到控制器?

2 个答案:

答案 0 :(得分:0)

您可以通过从您点击的customCell的索引中获取单元格,然后在didSelectRowAtIndexPath之后获取performSegueWithIdentifier中的单元格数据。

所以让我们更容易:

didSelectRowAtIndexPath方法下,添加此行以获取customCell的属性

YourCustomCell *customCell = (YourCustomCell *)[self.tableView cellForRowAtIndexPath:indexPath];

现在,如果您在customCell下存储了某些内容,则可以从customCell实例访问它。 在您设法从customCell存储或操作数据后,执行performSegueWithIndenfier

[self performSegueWithIdentifier:@"yourSegueID" sender:self];

希望这有帮助

答案 1 :(得分:-1)

当您将segue从单元格连接到另一个视图控制器时,除非它是静态表格视图,否则您必须从performSegueWithIdentifier

触发didSelectRowAtIndexPath

执行performSegueWithIdentifier后,将调用prepareForSegue

prepareForSegue中,您可以设置目标视图控制器,您可以通过segue.destinationViewController

访问该控制器

像这样:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    [super prepareForSegue:sender sender:sender];
    if ([segue.identifier isEqualToString:@"YOUR_SEGUE_NAME_HERE"]) {
      UIViewController *destinationViewController = segue.destinationViewController;
    }
}

或者,如果你需要在didSelectRowAtIndexPath进行设置,你可以做(​​仅限iOS7 +)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [self performSegueWithIdentifier:@"YOUR_SEGUE_NAME_HERE" sender:self];
    UIViewController *destinationViewController = [self.transitionCoordinator viewControllerForKey:UITransitionContextToViewControllerKey];
}

<强>更新

结果证明@rdelmar是正确的,它确实适用于动态单元格。

然后你需要做的就是

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    [super prepareForSegue:sender sender:sender];
    if ([segue.identifier isEqualToString:@"YOUR_SEGUE_NAME_HERE"]) {
       NSIndexPath *selectedIndexPath = [self.tableView indexPathForCell:sender];

    }
}

您拥有被点击的单元格的索引路径。然后,您可以使用它来查询数据源并找到用于填充该单元格的对象。