koogawa blog

iOS、Android、foursquareに関する話題

【StackOverflow活動日記】MapKit: MKAnnotation の Callout がうまく表示されない問題

割と続いております。StackOverflow活動日記です。

さて、今日回答したのはこちらの質問。

stackoverflow.com

私が得意とする MapKit 関連の質問です。

この分野で多いのが、

  • 地図上にピンが表示されない
  • ピンをタップしたときに表示されるバルーンが思い通りにならない
  • ピンがドラッグできない
  • 地図上に線が引けない

等の質問です。そして、そのほとんどが delegate プロパティのセット忘れや、delegate メソッドの実装漏れによるものです。

今回も「ピンは表示されるけど、ピンをタップしたときに表示されるバルーンにCallout(ボタンみたいなの)が表示されないよ」といった内容でした。

f:id:koogawa:20170831233019p:plain
▲この右側のボタンが表示されないようです

コメント欄のやり取りを見ると、どうやら delegate プロパティにはちゃんと self がセットされている様子です。その後、Stackoverflow のチャットルームに移動したようですが、解決には至らなかったもようです。*1

となると、次に疑うのは delegate メソッド(viewForAnnotation)の実装漏れです。質問文に載せられたソースコードをじっくり見てみると、どうやらちゃんと実装されている様子・・・いや、よく見てみると

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!

になっていました。このメソッドは Swift 3 で

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?

に変わっています。そのため、このメソッドが呼ばれず、Callout の設定も実行されずにいたようです。

その旨を回答したところ、無事問題が解決されたようです👍

***

Accept + vote up により、reputation が +25 されました。

2,500 まであと少し!がんばります💪

*1:Stackoverflowにはディスカッションのためのチャットルームが用意されている。20 reputation以上のユーザなら誰でも入室することができる