不同引脚注释的不同信息

Posted

技术标签:

【中文标题】不同引脚注释的不同信息【英文标题】:Different info for different pin annotations 【发布时间】:2016-07-28 21:03:20 【问题描述】:

我的地图视图上有两个不同的图钉。我每个都有一个信息按钮。信息按钮将连接到具有图像视图(保存该地点的图片)和一个文本标签(保存有关该地点的信息)的 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)

【问题讨论】:

在给代码的时候,要格式化好,否则很难通过它... 当您单击图钉时,您需要知道单击了标题为“都柏林动物园”或“都柏林镇”的图钉的哪个图钉注释?这是你的问题吗? 在那里重新格式化并添加了一些 cmets,因此应该更容易理解。是的,问题是我无法弄清楚如何仅将有关单击的图钉(即动物园图钉或城镇图钉)的信息发送到 infoViewController。 【参考方案1】:

为此,您需要覆盖以下方法。在这里,我们将获得将触发 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


【讨论】:

感谢这对区分各种引脚非常有帮助。但是这种方式只会发送标题和副标题。有没有办法将一段信息与每个引脚链接并显示?我正在考虑将字幕设置为信息段落,然后将其隐藏在注释中,您会怎么想?是否可以使用这种方法将图像与每个引脚链接? 你能说得更具体点吗.. 我没听懂 酷。好的,所以您发布的代码可以将所选引脚的标题和副标题发送到 infoViewController。这很有帮助。但是,我想向 infoViewController 发送有关所选引脚的段落,而不仅仅是引脚的标题和副标题。我还希望有一张与每个引脚相关联的图片,并能够将其发送到 infoViewController 以及段落。 很酷,因为它不是 annotation.annotation?.title 怎么能做到?或 annotation.annotation?.subtitle ??.

以上是关于不同引脚注释的不同信息的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 将不同的图像从数组设置到注释引脚

在 Swift 中的同一个 mapView 中分配多个注释 pinColors?

Java千百问_03基础语法(020)_注解注释有什么区别

选择注释引脚时更改引脚颜色

更新注释视图时如何在自定义注释引脚中制作动画

添加自定义注释引脚