我试图在一个MKAnnotationView的rightcalloutAccessoryView中显示一个自定义的图片来代替disclosureButton,但它没有出现。
这是我的代码。
UIButton *rightButton = [UIButton new];
UIImage * rightImage = [UIImage imageNamed:@"blue-car"];
[rightButton setImage:rightImage forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView = rightButton;
当我做上面的操作时,没有图像出现,如果你点击也不会发生任何事情。
然而,如果我使用下面的细节disolosureButton,图像确实出现了,并且可以点击呼出。
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
我的自定义按钮代码中缺少了什么,使按钮不能出现或做任何事情?
在你的MKAnnotationView子类中,你可以简单地提供这样的视图。
- (UIView*) rightCalloutAccessoryView {
UIView *aView = [[UIView alloc] initWithFrame:yourFrame];
// configure your view as you like...
return aView;
}
你的代码中少了什么? 很可能是一个动作,比如说。
[rightButton addTarget:nil action:@selector(showDetailCallout:) forControlEvents:UIControlEventTouchUpInside];
这段代码可以工作,因为一个nil的目标会让ios搜索一个合适的目标(这里是mapView代表)
事实上,根据文档,你的代码应该是可行的(因为UIButton是UIControl的一个子类,mapView委托人的 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
应该得到调用。