【发布时间】:2012-12-12 03:48:43
【问题描述】:
我发现一些帖子显示了如何根据 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 应该出现在其选定状态。我做错了什么?
【问题讨论】:
-
您实际上是否对所有注释视图使用单个实例
self.button?相反,请尝试在自定义注释类(实现MKAnnotation的注释类)中存储“选定”状态,并在 viewForAnnotation 中创建/设置一个反映当前annotation状态的本地按钮。 -
是的,它是一个实例,我在 viewForAnnotation 中设置它。我认为你是对的,我会努力做到这一点。我会告诉你这是否有效。还是谢谢!
-
您对单个实例的看法完全正确。我选择了一种与你的方法略有不同的方法:我正在检查注释是否在我的收藏夹 NSMutableArray 中,如果是,那么我在 viewForAnnotation 中将其设置为选中。
-
太好了,您可以自己将其添加为答案,甚至在几个小时后接受。
标签: ios uibutton mkannotationview