現在コールアウトをクリックすると処理が行われるように、以下のように`mapView:annotationView:calloutAccessoryControlTapped:`に処理を記述しております。

```

    - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView calloutAccessoryControlTapped:(UIControl *)control { 
        // 処理
    }
    
```

しかし、pin.rightCalloutAccessoryViewに入れて表示されるボタンの種類は

  * UIButtonTypeDetailDisclosure（iマーク）
  * UIButtonTypeContactAdd（+マーク）

の２種類だけで、UIButtonTypeCustomなどにしても表示されません。

```

    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    
```

どうすれば、好きなボタンを吹き出しに入れることができ、かつcalloutAccessoryControlTapped:を呼び出せるでしょうか。
CC BY-SA 3.0
2015-02-03T09:57:46.097
5856
2015-02-03T16:14:47.343
2015-02-03T16:14:47.343
30
8060
question
ios objective-c mapkit
MKMapのピンの吹き出しに表示するUIButtonの画像を変更したい
おそらく`frame`がゼロになっているので実際には追加されているけど見えない（当然タップもできない）状態になっていると思います。

書かれているように生成して直接代入するのではなく、いったん変数に受けて、`frame`を設定して、必要なら色を変えたり画像を設定するなどすると、好きな見た目のボタンを表示することができます。

```

    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
    rightButton.frame = CGRectMake(0.0, 0.0, 30.0, 30.0); // ここで適当な大きさを指定します
    
    // あとは色を変えたり画像を設定したり好きなように...
    rightButton.backgroundColor = [UIColor blueColor];
    [rightButton setImage:[UIImage imageNamed:@"flag"] forState:UIControlStateNormal];
    pinView.rightCalloutAccessoryView = rightButton;
    
```
CC BY-SA 3.0
2015-02-03T16:04:48.917
5889
2015-02-03T16:04:48.917
5519
5856
answer