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

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

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

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

Q&A

解決済

1回答

3745閲覧

Swift Mapkitでピンの吹き出しの中のボタンを押した時の処理

SungKyoung

総合スコア3

Swift

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

0グッド

1クリップ

投稿2020/06/28 14:37

編集2020/06/28 14:38

前提・実現したいこと

SwiftのMapkitを使っています。
ピンの吹き出しの中のiボタンを押したら、新しいViewController(今回はViewController3)に遷移し、ピンのタイトルを表示させたいです。
地図にピンを立て、吹き出しの中のiボタンを押したら、画面遷移させるところまでは出来ました。
あとは、ピンのタイトルを遷移先でラベルとして表示させたいです。

発生している問題・エラーメッセージ

エラーメッセージはありません。

該当のソースコード

ViewController.swift

import UIKit import MapKit import CoreLocation class ViewController: UIViewController, MKMapViewDelegate { func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { if annotation is MKUserLocation { //return nil so map view draws "blue dot" for standard user location return nil } let reuseId = "pin" let pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) pinView.canShowCallout = true pinView.animatesDrop = true let btn = UIButton(type: .detailDisclosure) btn.addTarget(self, action: #selector(buttonEvent(_:)), for: UIControl.Event.touchUpInside) pinView.rightCalloutAccessoryView = btn return pinView } // ピンの中のiマークを押したときの処理 @objc func buttonEvent(_ sender: UIButton) { let storyboard: UIStoryboard = self.storyboard! // ②遷移先ViewControllerのインスタンス取得 let nextView = storyboard.instantiateViewController(withIdentifier: "view3") as! ViewController3 // ③画面遷移 self.present(nextView, animated: true, completion: nil) } // ピンを立てる func addAnnotation( latitude: CLLocationDegrees,longitude: CLLocationDegrees, title:String, subtitle:String) { mapView.delegate = self let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2DMake(latitude, longitude) annotation.title = title annotation.subtitle = subtitle self.mapView.addAnnotation(annotation) } @IBOutlet weak var mapView: MKMapView! //CLLocationManagerの入れ物を用意 var myLocationManager:CLLocationManager! override func viewDidLoad() { super.viewDidLoad() //CLLocationManagerをインスタンス化 myLocationManager = CLLocationManager() //位置情報使用許可のリクエストを表示するメソッドの呼び出し myLocationManager.requestWhenInUseAuthorization() // / 以下を追加 /// // 中心地はユーザー現在地 mapView.setCenter(mapView.userLocation.coordinate, animated: true) mapView.userTrackingMode = MKUserTrackingMode.follow // 縮尺を設定 var region = mapView.region region.center = mapView.userLocation.coordinate region.span.latitudeDelta = 0.01 region.span.longitudeDelta = 0.01 // マップビューに縮尺を設定 mapView.setRegion(region, animated:true) // 以下ピン addAnnotation(latitude: 35.689830, longitude: 139.697320, title: "場所1", subtitle: "サブタイトル") addAnnotation(latitude: 35.683082, longitude: 139.701510, title: "場所2", subtitle: "サブタイトル") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

試したこと

関数addAnnotationの中で、

let pin_title = title

として、タイトルを取得しようと思ったのですが、関数addAnnotationを使うたびに毎回、pin_titleが変わってしまい、
遷移先では「場所2」しか表示されなかったです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

デリゲートメソッドを使う方法ではだめなのでしょうか?

このメソッドの中なら、viewにタップされたピンの情報が送られてくるので、
let title = view.annotation?.titleでタイトルが取得できます。
その後、遷移処理をされてはどうでしょうか?

投稿2020/06/28 19:45

編集2020/06/28 20:45
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

SungKyoung

2020/06/29 02:27

デリゲートメソッドを使う方法で出来ました! ありがとうございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問