针对不同引脚注释的不同信息

时间:2016-07-28 21:03:20

标签: mkmapview mapkit segue mkannotation mkpinannotationview

我的mapview上有两个不同的针脚。我每个都有一个信息按钮。信息按钮将转到具有图像视图(用于保存场所图片)和文本标签(用于保存有关场所的信息)的UIViewController。

我的问题是如何根据选择的引脚注释按钮生成信息和图片。最后一个函数是用于转换到信息视图控制器的函数。

  class GetToTheStart: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
//map view outlet
@IBOutlet weak var mapView: MKMapView!

//defining use of location manager
let myLocMgr = CLLocationManager()




     override func viewDidLoad() {
    super.viewDidLoad()

    //setting up location request
    myLocMgr.desiredAccuracy = kCLLocationAccuracyBest
    myLocMgr.requestWhenInUseAuthorization()
    myLocMgr.startUpdatingLocation()
    myLocMgr.delegate = self
    mapView.delegate = self

    // coordinates of desired locations for pins 
    var zoo1 = CLLocationCoordinate2DMake(53.347439, -6.291820)
    var town1 = CLLocationCoordinate2DMake(53.347247, -6.290865)

    //setting up pin 1 annotation (the zoo) 
    var zoopin = MKPointAnnotation()
    zoopin.coordinate = zoo1
    zoopin.title = "Dublin Zoo"
    zoopin.subtitle = "This this the zoo"
    mapView.addAnnotation(zoopin)

    //setting up pin 2 annotation (the town) 
    var townpin = MKPointAnnotation()
    townpin.coordinate = zoo1
    townpin.title = "Dublin town"
    townpin.subtitle = "This this the town"
    mapView.addAnnotation(townpin)
 }


   //setting up Pin callout button for segue
   func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation {
    }
    let reuseIdentifier = "pin"
    var pin =    mapView.dequeueReusableAnnotationViewWithIdentifier(reuseIdentifier) as? MKPinAnnotationView
    if pin == nil {
        pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
        pin!.pinColor = .Red
        pin!.canShowCallout = true
        pin!.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure)
    } else {
        pin!.annotation = annotation
    }
    return pin
}



   //performing segue from info button to infoViewController
   func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    performSegueWithIdentifier("info", sender: view)
}

1 个答案:

答案 0 :(得分:0)

为此,您需要覆盖以下方法。在这里,我们将获得将触发segue的annotationView。

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "info") {
        if let annotation = sender as? MKAnnotationView {
            let detailViewController = segue.destinationViewController as! DetailViewController
            detailViewController.titleText  = annotation.annotation?.title ?? ""
            detailViewController.detaileText = annotation.annotation?.subtitle ?? ""
        }
    }
}

在detailViewController和infoViewController相同,这里我有两个标签,为此我有两个公共变量。这只是为了避免错误,因为此时我们没有标签对象。

这是我的DetailViewController的代码。

import UIKit

class DetailViewController: UIViewController {

@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var detailLabel: UILabel!


var titleText: String? { didSet { updateUI() } }
var detaileText: String? { didSet { updateUI() } }

override func viewDidLoad() {
    super.viewDidLoad()
    updateUI()
}

private func updateUI() {
    self.titleLabel?.text = self.titleText
    self.detailLabel?.text = self.detaileText
}
}