我有一个带有listview的控制器,其中包含一个自定义单元格。
我已经从单元格创建了一个模态segue到下一个控制器,我为这个segue命名,但是当我点击单元格时,prepareForSegue
没有被调用。
我可以使用didSelectRowAtIndexPath
和performSegueWithIdentifier
,但我必须从我点击的单元格向下一个控制器发送数据。
知道为什么没有调用prepareForSegue
?或者如何使用其他方法将数据发送到控制器?
答案 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];
}
}
您拥有被点击的单元格的索引路径。然后,您可以使用它来查询数据源并找到用于填充该单元格的对象。