我有一张地图,地图有注释,我可以在表视图中看到这些注释作为单元格,然后我可以看到我选择的任何单元格的详细信息,如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
谢谢:)
答案 0 :(得分:3)
有点不清楚你在问什么。这里有几个猜测和他们的答案:
从IB中的控件(表格单元格,按钮等)拖动是一种很好的制作segue的方法,因为UIKit可以为您处理所有事情 - 当点击控件时,它会自动执行segue。但是有些控件你不能创建segue,以及你可能希望以编程方式控制执行segue的时间。为此,您可以通过在IB中从视图控制器本身拖动来创建segue;给segue一个唯一的标识符,然后在视图控制器中,只要你想要发生segue就可以调用[self performSegueWithIdentifier:@"myIdentifier"]
。
在这种情况下,你可能会在mapView:annotationView:calloutAccessoryControlTapped:
内调用它。
据推测,您的模型对象符合MKAnnotation
协议,您可以使用addAnnotation(s):
将它们添加到地图中。在这种情况下,当调用地图委托(可能是您的视图控制器)mapView:annotationView:calloutAccessoryControlTapped:
方法时,第二个参数会引用相应的MKAnnotationView
。该类有一个属性annotation
,它将指向您的模型对象。
当然,在这种方法中,您只是调用performSegueWithIdentifier:
,因此您还无法访问目标视图控制器。因此,您现在需要保留该模型对象引用(例如,在ivar中),然后您的prepareForSegue:sender:
实现可以将其传递给目标视图控制器。