我创建了一个MKAnnotationView
的子类,当选中它时会显示一个标注视图(类似于MKPinAnnotationView),它只是UIView
的子类,现在带有一个按钮和文本。标注将添加到注释视图中。我遇到的问题是我在标注视图中放置的按钮从不触发任何操作,它似乎没有响应触摸事件。
我创建新MKAnnotationView
的原因是因为我需要显示更多内容
比注释视图中的文本和两个按钮,我找不到方法
使用常规MKPinAnnotationView
标注实现此目的。
代码:
- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation {
if(![annotation isKindOfClass:[CSMapAnnotation class]])
return nil;
CSMapAnnotation* csAnnotation = (CSMapAnnotation*)annotation;
CustomAnnotation *customAnnotationView=[[[CustomAnnotation alloc] initWithAnnotation:annotation reuseIdentifier:nil] autorelease];
MKPinAnnotationView* pin = nil; pin = [[[MKPinAnnotationView alloc] initWithAnnotation:customAnnotationView reuseIdentifier:@"identifier"] autorelease];
[pin setPinColor: MKPinAnnotationColorRed ];
MKAnnotationView *annotationView = pin;
annotationView.canShowCallout = YES;
[pin setPinColor:(csAnnotation.annotationType == CSMapAnnotationTypeStart) ? MKPinAnnotationColorGreen : ((csAnnotation.annotationType == CSMapAnnotationTypeCarLocation)? MKPinAnnotationColorPurple:MKPinAnnotationColorRed) ];
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0,0,85,25)];
[leftView setBackgroundColor:[UIColor clearColor]];
UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom];
[shareButton setBackgroundImage:[UIImage imageNamed:@"share.png"] forState:UIControlStateNormal];
[shareButton setFrame:CGRectMake(19+GAP, 0, 25, 25)];
[shareButton addTarget:self action:@selector(shareButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[leftView addSubview:shareButton];
UIButton *setAlertButton = [UIButton buttonWithType:UIButtonTypeCustom];
[setAlertButton setBackgroundImage:[UIImage imageNamed:@"alert.png"] forState:UIControlStateNormal];
[setAlertButton setFrame:CGRectMake(shareButton.frame.origin.x+shareButton.frame.size.width+GAP, 0, 25, 25)];
[setAlertButton addTarget:self action:@selector(alertButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[leftView addSubview:setAlertButton];
annotationView.rightCalloutAccessoryView = leftView;
[leftView release];
return annotationView;
}
-(void)shareButtonAction:(id)sender {
NSLog(@"%s",_cmd);
}
当我点击shareButton时,shareButtonAction操作没有调用...
我也检查了上面的委托,但是在安装到iPhone 3.0时没有调用它。如果我只有一个按钮来调用右边的话,这个代理会调用但是(在上面的例子中)当用两个按钮添加视图时它没有调用。它发生在iPhone 3.0中。
答案 0 :(得分:1)
我不知道你是否知道(或者你是否关心),但是你正在将一个MKAnnotationView传递给一个要求MKAnnotation的方法,这将导致你在以后的轨道上遇到问题。
也正因为如此,我不知道我的答案是否真的适合你,但是当你点击callout的附件控件时,有一个委托方法可以调用凝胶。将自己设置为mapview实例委托后,只需实现:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
NSLog (@"Callout accessory control tapped");
}