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

问题描述 投票:1回答:1

我试图在一个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];

我的自定义按钮代码中缺少了什么,使按钮不能出现或做任何事情?

ios objective-c uibutton mkannotationview
1个回答
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 应该得到调用。

© www.soinside.com 2019 - 2024. All rights reserved.