MKPinAnnotationView Callout按钮应将自定义对象传递给Details ViewController

时间:2012-02-25 22:53:35

标签: ios annotations mkmapview mkannotationview callouts

我有一个符合MKAnnotation协议的注释类。该类有一个init方法,用于设置坐标,标题和副标题。

我创建了这些注释的数组,并使用addAnnotations:annotationArray以正常方式将它们添加到MKMapView。

然后在MKMapViewDelegage方法- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation中,我创建了一个带有自定义引脚颜色的MKPinAnnotationView,animatesDrop,canShowCallout。标注具有类型为UIButtonTypeDetailDisclosure的UIButton。

当我运行应用程序并单击地图上的图钉时,我得到了预期的结果,即标题,副标题和detailDisclosure按钮的标注。

我想弄清楚的是当用户点击详细信息披露按钮时如何将数据传递到详细信息页面([self.navigationController pushViewController:detailsController animated:YES];)。我试图通过向init方法添加一个额外的参数来修改我的注释类,但是我无法在- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control方法中访问该参数。我似乎只能通过这样的[view.annotation title]来访问标题和副标题。

我不知道该怎么做,我似乎无法找到任何关于如何做到这一点的文件......

再次。我想将一个对象传递给一个详细视图控制器。该对象将包含将在详细信息页面上使用的各种数据...

PS - 我正在使用Xcode 4.2 w / ARC。

1 个答案:

答案 0 :(得分:3)

calloutAccessoryControlTapped中,注释引用是您创建和添加的确切注释对象,但引用的输入通常为id<MKAnnotation>

要访问注记类中的自定义属性,可以先将其强制转换:

YourAnnotationClass *myAnn = (YourAnnotationClass *)view.annotation;

//now you can explicitly reference your custom properties...
NSLog(@"myAnn.customProp = %@", myAnn.customProp);

确保“customProp”被定义为注释类中的属性。