ios - 如何使用swift2向 map View 中的第二个注释/pin添加不同的按钮操作

标签 ios swift3 mkmapview mkannotation

任何人都可以帮我为第二个注释/pin(annotation2)添加不同的按钮 Action ,现在按钮在两个注释针中做同样的工作如何相互做不同的工作。我在我的项目中使用 Swift3,这是我的代码。谢谢

这是我的代码。

  import UIKit
  import MapKit
  import CoreLocation

 class MyAnnotation: MKPointAnnotation {
      var uniqueId: Int!
 }

  class LocationViewController: UIViewController , MKMapViewDelegate , CLLocationManagerDelegate{

    @IBOutlet weak var map: MKMapView!{

    didSet{
        map.delegate = self
    }
}

@IBOutlet weak var locationInfo: UITextView!


override func viewDidLoad() {
    super.viewDidLoad()


    let locations = CLLocationCoordinate2DMake(33.314627, 44.303500)

    let location2 = CLLocationCoordinate2DMake(33.312149, 44.3024567)

    let span = MKCoordinateSpanMake(0.02, 0.02)

    let span2 = MKCoordinateSpanMake(0.02, 0.02)

    let region = MKCoordinateRegionMake(locations, span)

     let region2 = MKCoordinateRegionMake(location2, span2)


    map.setRegion(region, animated: true)

    map.setRegion(region2, animated: true)


    let annotation = MyAnnotation()
    //annotation.setCoordinate(location)
    annotation.coordinate = locations
    annotation.title = "Zaid Homes"
    annotation.subtitle = "Hay aljameaa"

    annotation.uniqueId = 1

    map.addAnnotation(annotation)

    let annotation2 = MyAnnotation()
    //annotation.setCoordinate(location)
    annotation2.coordinate = location2
    annotation2.title = "Zaid "
    annotation2.subtitle = "aljameaa"

    annotation.uniqueId = 2

    map.addAnnotation(annotation2)

    //Showing the device location on the map
    self.map.showsUserLocation = true;

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    var view = mapView.dequeueReusableAnnotationView(withIdentifier: "AnnotationView Id")
    if view == nil{
        view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "AnnotationView Id")
        view!.canShowCallout = true
    } else {
        view!.annotation = annotation
    }

    view?.leftCalloutAccessoryView = nil
    view?.rightCalloutAccessoryView = UIButton(type: UIButtonType.detailDisclosure)


    return view
}

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {

    if (control as? UIButton)?.buttonType ==   UIButtonType.detailDisclosure {
        mapView.deselectAnnotation(view.annotation, animated: false)
        if let myAnnotation = view.annotation as? MyAnnotation {
            if (myAnnotation.uniqueId == 1) {
                performSegue(withIdentifier: "info", sender: view)
            }
            else  {
                performSegue(withIdentifier: "info2", sender: view)
            }
        }            
    }
}

}

最佳答案

了解您点击哪个注释的最简单方法是使用创建自定义注释类并添加它的注释。所以创建一个注释类MyAnnotation MKPointAnnotation 的子类并使用您的多个注释维护一个 uniqueId。

class MyAnnotation: MKPointAnnotation {
    var uniqueId: Int!
}

现在您需要添加类型为 MyAnnotation 的注释。而不是 MKPointAnnotation .
let annotation = MyAnnotation()
annotation.coordinate = locations
annotation.title = "Zaid Homes"
annotation.subtitle = "Hay aljameaa"
//Set uniqueId for annotation
annotation.uniqueId = 1    
map.addAnnotation(annotation)

let annotation2 = MyAnnotation()
annotation2.coordinate = location2
annotation2.title = "Zaid "
annotation2.subtitle = "aljameaa"
//Set uniqueId for annotation
annotation2.uniqueId = 2    
map.addAnnotation(annotation2)

现在检查这个uniqueIdcalloutAccessoryControlTapped您点击的注释的方法。
func mapView(_ mapView: MKMapView, annotationView view:  MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {

    if (control as? UIButton)?.buttonType ==   UIButtonType.detailDisclosure {
        mapView.deselectAnnotation(view.annotation, animated: false)
        if let myAnnotation = view.annotation as? MyAnnotation {
            if (myAnnotation.uniqueId == 1) {
                 performSegue(withIdentifier: "info1", sender: view)
            }
            else  {
                 performSegue(withIdentifier: "info2", sender: view)
            }
        }            
    }
}

关于ios - 如何使用swift2向 map View 中的第二个注释/pin添加不同的按钮操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41890411/

相关文章:

swift - 在 Swift 中将 boolean 值转换为整数值

swift - 我如何比较 Swift 3 中的两个日期 (NSDate) 并获得它们之间的日期?

swift - 原始类型 'Error' 不能用任何文字表达

iphone - 如何在 MKMapView 中将我当前的位置居中?

ios - Mapkit Center the user Location annotation in another other views 坐标

ios - 在 ios 中显示位置并找到最近的位置

ios - 如何知道请求是否来自缓存或不使用 AFNetworking

ios - NSMutableArray 丢失添加的数据

ios - 返回 WF : _WebFilterIsActive returning: NO on device 的 MP3 流

ios - 检测 mkoverlay 上的触摸