1

状態に応じて UIButton の画像または imageBackground を変更する方法を示す投稿をいくつか見つけました。UIButtonしかし、これが MKAnnotationView の Callout バブル内にある場合については言及していません。これが私がやろうとしていることです:

マップに多くの MKAnnotationView があり、ユーザーがそれらのいくつかをお気に入りとして設定できるようにしたいと考えています。そして、このオプションが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 に答える