1

我在 adetailDisclousure的标注上有一个按钮MKAnnotation。当按下这个按钮时,我需要调用一个方法,传递一个参数来标识annotation调用它的人。怎么可能做到?

这是我对注解的看法:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{

if ([annotation isKindOfClass:[Annotation class]])
{
    static NSString* identifier = @"identifier";

    MKPinAnnotationView* pinView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

    if (pinView == nil) 
    {
        pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]autorelease];
    }

    Annotation *antt = annotation;

    pinView.canShowCallout = YES;
    pinView.draggable =    YES;

    UIButton* detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    [detailButton performSelector:@selector(goToViewWithAnnotation:) withObject:antt];

    pinView.rightCalloutAccessoryView = detailButton;

    return pinView;
}

else 
{
    return nil; 
}
}

这是应该使用参数调用的方法:

-(void)goToViewWithAnnotation:(Annotation *)annotation
{
    NextViewController *nextView = [[NextViewController alloc]initWithNibName:@"NextViewController" bundle:nil];

nextView.id = annotation.id;

[self.navigationController nextView animated:YES];
}
4

3 回答 3

4

您可以通过唯一NSIntegertag属性传递任何。UIButton

于 2012-07-23T15:24:55.713 回答
2

无法使用-addTarget:action:forControlEvent:for发送数据UIButton

[detailButton addTarget:self action:@selector(goToViewWithAnnotation:) forControlEvents:UIControlEventTouchUpInside];

当您触发选择器时,尝试以其他方式处理数据。就像根据需要保存指针或变量一样。

UIButton如您所见,有这些来电者:

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event
于 2012-07-23T13:59:32.730 回答
0

我认为您可以在 .h 文件中添加一个属性(即 (Annotation *)annotation)。然后你可以在“-(void)goToViewWithAnnotation”方法中使用注解。或者您可以自定义一个继承 UIControl 的新按钮

于 2012-07-23T15:10:03.807 回答