1

我发现一些帖子显示了如何根据其状态更改 UIButton 的图像或图像背景。但是他们都没有提到这UIButton是在 MKAnnotationView 的标注气泡内的情况。这是我正在尝试做的事情:

我的地图上有很多 MKAnnotationViews,我希望用户能够将其中一些设置为收藏夹。而且我认为如果这个选项可以UIButton作为我的leftCalloutAccessoryView.

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
// Here I've created the button...
// Now I set the states:

        [self.button setImage:self.image_1 forState:UIControlStateNormal];
        [self.button setImage:self.image_2 forState:UIControlStateHighlighted];
        [self.button setImage:self.image_3 forState:UIControlStateSelected];

        annotationView.leftCalloutAccessoryView = self.button;
}

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
self.button.selected = YES;
}

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
if ([self annotationIsFavorite:view.annotation])
{
    [self.button setImage:self.image_3 forState:UIControlStateNormal];
}
}

我尝试了不同的方法。UIButton为气泡内部设置此特定状态是否有任何限制?因为UIControlStateHighlighted工作正常。我不得不把那个代码放在didSelectAnnotationView:'因为如果注释已经是最喜欢的,UIButton应该出现在它的选定状态。我究竟做错了什么?

4

1 回答 1

1

感谢@Anna Karenina,我发现我做错了什么:对所有注释视图使用我的 UIButton 的单个实例。不过,我做了一些与她在 viewForAnnotation 中的建议有些不同的事情。我不是在我的自定义注释类中存储“选定”状态,而是始终检查注释当前是否在我的收藏夹数组中,如果是,我将其按钮状态更改为选定。也许她的解决方案更优雅,甚至更快,我稍后会尝试。

于 2012-12-15T12:57:14.040 回答