質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

1796閲覧

mapView:viewForを設定してもボタンが表示されません

clo.momo

総合スコア27

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2018/05/31 06:10

編集2018/06/02 00:55

mapView:viewForでマーカーにボタンを追加したいのですが、うまくいきません。

理想の機能
0. ロングタップで現在地にマーカーを設置 → OK
0. マーカーをタップすると吹き出しが表示 左と右にボタンがある → ❌
0. 左のボタンでマーカーの色が変わる 右のボタンでマーカーを削除 → ❌

下記サイトを参考にまずは、デフォルトのマーカーじゃなくて参考サイトの通りピンで吹き出しを表示させようとしているのですが、うまく表示されません。

参考にしたサイト
[Swift]MapKitのPinカスタムでちょっとハマった話
iOS11 アノテーション クラスタリング
【Swift】detailCalloutAccessoryViewの使い方。ピンの吹き出しをカスタマイズする。

もちろん現在エラーは出ていません。
ピンは緑色になっているので、ここまでは問題ありません。

Swift

1annotationView?.pinTintColor = .green

ここから先のコード自体は問題がないはずです。
表示されないということは、書く場所が間違っているのか、それともなにか足りないものがあるのでしょうか?

Swift

1//左ボタンをアノテーションビューに追加する 2 let leftButton = UIButton() 3 leftButton.frame = CGRect(x: 0, y: 0, width: 160, height: 40) 4 leftButton.setTitle("????", for: UIControlState.normal) 5 leftButton.backgroundColor = UIColor.blue 6 pinView.leftCalloutAccessoryView = leftButton

mapView viewFor全体のコード

Swift

1 let markerView = MKMarkerAnnotationView() 2 3 //選択したアノテーションにボタンを追加する 4 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 5 6 if annotation is MKUserLocation { 7 return nil 8 } 9 10 let pinView = MKAnnotationView() 11 pinView.canShowCallout = true 12 13 let pinID = "PIN" 14 var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: pinID) as? MKPinAnnotationView 15 if annotationView == nil { 16 annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: pinID) 17 annotationView?.pinTintColor = .green ⇐ここまではOKって 18 //左ボタンをアノテーションビューに追加する 19 let leftButton = UIButton() 20 leftButton.frame = CGRect(x: 0, y: 0, width: 160, height: 40) 21 leftButton.setTitle("????", for: UIControlState.normal) 22 leftButton.backgroundColor = UIColor.blue 23 pinView.leftCalloutAccessoryView = leftButton 24 25 } else { 26 annotationView!.annotation = annotation 27 } 28 return annotationView 29 } 30 31 //アノテーションをタップした時のメソッド 32 func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 33 if(control == view.leftCalloutAccessoryView) { 34 //左ボタンがタップされたらアノテーションを青に変える 35 if let pinView = view as? MKPinAnnotationView { 36 pinView.pinTintColor = UIColor.blue 37 } 38 } else { 39 //右ボタンがタップされたらアノテーションを削除する 40 mapView.removeAnnotation(view.annotation!) 41 } 42 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

下記コードを追加することでコールアウトが表示されました。

Swift

1let centerButton = UIButton() 2 centerButton.frame = CGRect(x: 0, y: 0, width: 160, height: 40) 3 centerButton.setTitle("センター", for: UIControlState.normal) 4 pinView.detailCalloutAccessoryView = centerButton

投稿2018/06/02 05:59

clo.momo

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

canShowCalloutを設定しているAnnotationViewは、let pinView = MKAnnotationView()で定義したpinViewですが、
leftButtonを設定しているのはannotationViewとなっています。まずは、annotationViewcanShowCallout = trueしてleftButtonを設定してあげてはどうでしょうか?

投稿2018/06/02 04:35

編集2018/06/02 05:37
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問