用Objective-C中的MKAnnotation中的customButton替换rightCalloutAccessoryView中的detailDisclosureButton

时间:2018-12-03 15:56:26

标签: ios objective-c uibutton mkannotationview

我正在尝试在MKAnnotationView的rightcalloutAccessoryView中显示自定义图像,以代替DiscreakmentButton,但是它没有出现:

这是我的代码:

    UIButton *rightButton = [UIButton new];
    UIImage * rightImage = [UIImage imageNamed:@"blue-car"];

    [rightButton setImage:rightImage forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView = rightButton;

当我执行上述操作时,如果单击,则不会显示图像,并且什么也不会发生。

但是,如果我使用以下内容,则显示详细的discolosureButton,但确实出现图像并且可以点击标注。

annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

自定义按钮代码中缺少哪些阻止按钮显示或执行任何操作的东西?

1 个答案:

答案 0 :(得分:0)

在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