前提・実現したいこと
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/29 02:27