【发布时间】:2015-03-10 16:22:58
【问题描述】:
我在TableViewController 中显示了一组项目。它们在 TVC 中正确显示。下面的代码继续,但它只与我的MKMapItems 数组中的indexPath 0 相关,而不是被单击的单元格中的项目。
对我的错误在哪里有什么想法吗?
@property (strong, nonatomic) NSArray *mapItems;
每个单元格都有一个“添加 POI”UIButton,它会触发使用 Interface Builder 创建的名为“addPOISegue”的 segue。
这是“添加 POI”按钮的 IBAction:
- (IBAction)addPOIButtonClicked:(UIButton *)sender {
NSLog(@"Add POI button clicked");
[self performSegueWithIdentifier:@"addPOISegue" sender:sender];
}
这是`prepareForSegue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton*)sender {
// NSLog(@"The sender is %@", sender);
if ([[segue identifier] isEqualToString:@"addPOISegue"]) {
AddPOIViewController *destinationVC = segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:sender.center];
NSLog(@"NSIndexPath *indexPath's index is %@", indexPath);
MKMapItem *item = _mapItems[indexPath.row];
// NSLog(@"ResultsTVC item is %@", item);
destinationVC.item = item;
}
}
indexPath 一直设置为 0。我怀疑这是因为我有一个按钮触发单元格内的 segue,但我不知道如何解决这个问题。
【问题讨论】:
-
你是直接从按钮做的segue吗?如果是这样,您不应该调用 performSegue。
-
如何设置
destinationViewController的属性?我试着摆弄它,但我无法设置它的属性。 -
你在 prepareForSegue 中这样做,就像你已经做到的那样。请在此处查看我的答案 (stackoverflow.com/questions/28818617/…),了解如何获取 indexPath
-
您查看我提供的链接了吗?当您单击按钮时,单元格未被选中,因此 indexPathForSelectedRow 将为 nil。您需要使用 indexPathForRowAtPoint: 并将按钮的中心传递给 point 参数(发送者将是 prepareForSegue:sender 中的按钮)。
-
就像我在链接中显示的那样。将 prepareForSegue:Sender: 中的 sender 参数更改为“(UIButton *) sender”而不是“id”,然后将 sender.center 作为 point 参数传递。
标签: ios objective-c uitableview segue