0

我有一张地图,地图有注释,我可以在表格视图中将这些注释视为一个单元格,然后我可以看到我选择的任何单元格的详细信息,例如 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 时,按钮将转到与单元格将在表视图中转到的相同 DetailsViewController

是否有可能做到这一点 ?

我已阅读有关 calloutAccessoryControlTapped 的信息,但我不确定如何使已选择的注释成为我在 DetailsViewController 中声明的 detailItem

谢谢 : )

4

1 回答 1

3

有点不清楚你在问什么。以下是一些猜测及其答案:

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

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

在这种情况下,您可能会从内部调用它mapView:annotationView:calloutAccessoryControlTapped:

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

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

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

于 2012-05-28T05:40:56.153 回答