Ios 将mkAnnotationView设置为收藏夹

Ios 将mkAnnotationView设置为收藏夹,ios,uibutton,mkannotationview,Ios,Uibutton,Mkannotationview,我发现一些帖子展示了如何根据UIButton的状态更改其图像或图像背景。但是他们都没有提到这个ui按钮在MKAnnotationView的标注气泡中的情况。以下是我想做的: 我的地图上有很多mkannotationview,我希望用户能够将其中一些设置为收藏夹。我认为如果这个选项可以作为ui按钮设置为myleftCalloutAccessoryView,那就太酷了 - (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotat

我发现一些帖子展示了如何根据UIButton的状态更改其图像或图像背景。但是他们都没有提到这个
ui按钮
在MKAnnotationView的标注气泡中的情况。以下是我想做的:

我的地图上有很多mkannotationview,我希望用户能够将其中一些设置为收藏夹。我认为如果这个选项可以作为
ui按钮
设置为my
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];
}
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{
//在这里,我已经创建了按钮。。。
//现在我设置状态:
[self.button setImage:self.image_1 for状态:uicontrol状态正常];
[self.button setImage:self.image_2 for状态:uicontrol状态高亮显示];
[self.button setImage:self.image_3 for状态:UIControlStateSelected];
annotationView.leftCalloutAccessoryView=self.button;
}
-(无效)地图视图:(MKMapView*)地图视图注释视图:(MKAnnotationView*)视图调用访问控制点击:(UIControl*)控制
{
self.button.selected=是;
}
-(无效)地图视图:(MKMapView*)地图视图未选择注释视图:(MKAnnotationView*)视图
{
if([self-annotationsFavorite:view.annotation])
{
[self.button setImage:self.image_3 for状态:uicontrol状态正常];
}
}

我尝试过不同的方法。为气泡内的
ui按钮设置此特定状态是否有任何限制?因为
UIControlStateHighlighted
工作正常。我必须将该代码放在
didSelectAnnotationView:
上,因为如果注释已经是收藏夹,则
ui按钮应以其选中状态显示。我做错了什么?

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

多亏了@Anna Karenina,我发现了我做错的地方:对所有注释视图使用我的UIButton的一个实例。不过,从注释的角度来看,我做了一些与她的建议略有不同的事情。与在自定义注释类中存储“selected”状态不同,我总是检查注释当前是否在收藏夹数组中,如果在收藏夹数组中,则将其按钮状态更改为selected。也许她的解决方案更优雅,甚至更快,我稍后会尝试。

您是否真的对所有注释视图使用了单实例
self.button
?相反,尝试在自定义注释类(实现
MKAnnotation
)中存储一个“选定”状态,并在viewForAnnotation中创建/设置一个反映当前
注释
状态的本地按钮。是的,它是一个实例,我正在viewForAnnotation中设置它。我想你是对的,我会尽力的。我会让你知道这是否有效。无论如何谢谢你!你对这个例子的看法是绝对正确的。我选择了一种与您稍有不同的方法:我正在检查注释是否在我最喜欢的NSMutableArray中,如果在,则在viewForAnnotation中将其设置为选中。很好,您可以自己添加它作为答案,甚至在几个小时后接受它。您是否真的对所有注释视图使用单个实例
self.button
?相反,尝试在自定义注释类(实现
MKAnnotation
)中存储一个“选定”状态,并在viewForAnnotation中创建/设置一个反映当前
注释
状态的本地按钮。是的,它是一个实例,我正在viewForAnnotation中设置它。我想你是对的,我会尽力的。我会让你知道这是否有效。无论如何谢谢你!你对这个例子的看法是绝对正确的。我选择了一种与您稍有不同的方法:我正在检查批注是否在我的收藏夹NSMutableArray中,如果在,我将其设置为在viewForAnnotation中选中。太好了,您可以自己添加它作为答案,甚至在数小时后接受它。