calloutaccessorycontroltapped或prepareForSegue

时间:2012-05-28 05:12:28

标签: iphone xcode map annotations detailview

我有一张地图,地图有注释,我可以在表视图中看到这些注释作为单元格,然后我可以看到我选择的任何单元格的详细信息,如xcode中的主要详细信息项目

像这样

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Object *object = [self.objects objectAtIndex:indexPath.row];
DetailsViewController *detailsViewController = segue.destinationViewController;
detailsViewController.detailItem = object;
}

代码用于表格视图中将推送到详细信息视图的单元格

但我希望用户在注释中按UIButtonTypeDetailDisclosure时,Button将转到单元格将在表格视图中转到的相同DetailsViewController

可以这样做吗?

我已经阅读了有关calloutAccessoryControlTapped但我不知道如何使已经选择的注释成为我在DetailsViewController中声明的detailItem

谢谢:)

1 个答案:

答案 0 :(得分:3)

有点不清楚你在问什么。这里有几个猜测和他们的答案:

如何从地图标注附件按钮执行segue?

从IB中的控件(表格单元格,按钮等)拖动是一种很好的制作segue的方法,因为UIKit可以为您处理所有事情 - 当点击控件时,它会自动执行segue。但是有些控件你不能创建segue,以及你可能希望以编程方式控制执行segue的时间。为此,您可以通过在IB中从视图控制器本身拖动来创建segue;给segue一个唯一的标识符,然后在视图控制器中,只要你想要发生segue就可以调用[self performSegueWithIdentifier:@"myIdentifier"]

在这种情况下,你可能会在mapView:annotationView:calloutAccessoryControlTapped:内调用它。

如何将我的模型对象传递给这种segue中的下一个视图控制器?

据推测,您的模型对象符合MKAnnotation协议,您可以使用addAnnotation(s):将它们添加到地图中。在这种情况下,当调用地图委托(可能是您的视图控制器)mapView:annotationView:calloutAccessoryControlTapped:方法时,第二个参数会引用相应的MKAnnotationView。该类有一个属性annotation,它将指向您的模型对象。

当然,在这种方法中,您只是调用performSegueWithIdentifier:,因此您还无法访问目标视图控制器。因此,您现在需要保留该模型对象引用(例如,在ivar中),然后您的prepareForSegue:sender:实现可以将其传递给目标视图控制器。