2016-12-15 72 views
0

我实现了地图视图并为注释创建了简单的数据模型。swift,mapView,注解视图不会在点击时显示

引脚显示在地图上,但我仍无法通过点击任何引脚来获取详细信息。

pins screenshot

我的代码:

import UIKit 
import MapKit 

class MapViewController: UIViewController, MKMapViewDelegate { 

    @IBOutlet weak var mapView: MKMapView! 
    @IBOutlet weak var topView: MapDataView! 

    var dummyModel: DummyModel? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     dummyModel = DummyModel() 

     mapView.delegate = self 
     mapView.showsUserLocation = true 
     let region = MKCoordinateRegionMakeWithDistance(mapView.userLocation.coordinate, 1000, 1000) 
     mapView.setRegion(region, animated: true) 

     let range = 0..<Int((dummyModel?.objectsArray.count)!) 

阵列是有效的,并没有零:

 for i in range { 
      mapView.addAnnotation((dummyModel?.objectsArray[i])!) 
     } 

我的方式添加注释到地图:

 mapView.selectAnnotation(mapView.annotations[0], animated: true) 
    } 

    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 
     print("viewForAnnotation") 
     let identifier = "PubMapObject" 

     if annotation is PubMapObject { 
      var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) 

      if annotationView == nil { 
       annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier) 
       annotationView!.canShowCallout = true 

       let btn = UIButton(type: .detailDisclosure) 
       annotationView!.rightCalloutAccessoryView = btn 
      } else { 
       annotationView!.annotation = annotation 
      } 

      return annotationView 
     } 

     return nil 
    } 

这种方法从来没有打电话,我不知道为什么。我想这个问题是在这里,但我无法找到它):

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 
     print("annotationView") 
     let pub = view.annotation as! PubMapObject 
    }   
} 
+0

更新给你的框架完整的代码,因为我认为didSelect方法和其他方法缺少在您的代码 –

回答

1

尝试添加注释视图的一套框架返回注释视图 //我的注释课前和返回的注解视图之前提供的宽度和高度来标注视图和

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 

if (annotation.isKind(of: MKUserLocation.self)) { 
      return nil 
     } 


let reuseId = "PubMapObject" 
     if (annotation.isKind(of: PubMapObject.self)) { 
      let anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
      anView.isEnabled = true 
      anView.isUserInteractionEnabled = true 
      let btn = UIButton(type: .detailDisclosure) 
      btn.frame = CGRect(x: 0, y: 0, width: 50, height: 70) 
      anView!.rightCalloutAccessoryView = btn 
      anView.frame = CGRect(x: 0, y: 0, width: 50, height: 70) 
      return anView 
     } 

    return nil 
} 
0

尝试使用didSelect函数代替calloutAccessoryControlTapped。

func mapView(_ mapView: MKMapView, didSelect annotationView: MKAnnotationView) { ... 
+0

我试过这种方式,但该方法从未被称为 –

相关问题