如何选择注释并将ID传递给特定的详细信息页面?

时间:2011-09-02 10:44:01

标签: iphone objective-c xcode mapkit

我在myannotation类自定义中添加了beepid作为字符串,这是休息:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    DLog(@"calloutAccessoryControlTapped");

    /// detail page opening but beeid not passing

    MyAnnotation *myAnnot = (MyAnnotation *)view.annotation;





    BeepsDetail *objCont = [[BeepsDetail alloc] initWithNibName:@"BeepsDetail" bundle:nil];
    objCont.mId = myAnnot.beepid;
    objCont.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController: objCont animated: YES];

    //[paramDic setValue:[mObject.mDic objectForKey:@"beepid"] forKey:@"beepid"];
    [objCont release];


}

1 个答案:

答案 0 :(得分:2)

该行

NSMutableDictionary *dic = [placeName objectAtIndex:MKAnnotationView.annotion];

给出错误,因为MKAnnotationView,并且类中没有annotation方法。您将使用的是view.annotation,因为view是所选MKAnnotationView的实例。此外,annotion拼写错误。

但是,由于view.annotation是注释对象而不是placeName数组中的整数索引,因此仍然无效。

你说你是“点击右箭头”,这意味着标注中有正确的标注附件按钮(而不是注释本身)。在这种情况下,您应该使用calloutAccessoryControlTapped委托方法而不是didSelectAnnotationView来检测选择。

在这两种情况下,您首先使用view.annotation访问注释对象,然后使用注释对象的某些属性(可能是自定义),确定详细数据。

例如,如果您已创建自定义MKAnnotation类(而不是使用MKPointAnnotation),则可以向其添加beepId属性,在创建注释时设置它,并在您可以像这样检索委托方法:

MyAnnotationClass *myAnnot = (MyAnnotationClass *)view.annotation;
objCont.mId = myAnnot.beepid;