嘿伙计们我真的陷入了困境,我在任何地方都找不到答案,所以我们走了。
我有一个需要显示多个mkannotations的mapView,所以我创建了一个数组,并在一系列" posts"中存储了标题,子标题等。这是与地图共享的用户帖子(此代码可以正常工作)
@IBOutlet weak var mapView: MKMapView!
var annotations = [MKAnnotation]()
var posts = [Post]() // arr of local post objects
func addPostsToMap(){
mapView.removeAnnotations(annotations)
annotations.removeAll()
for post in posts{
let location : CLLocationCoordinate2D = CLLocationCoordinate2DMake(post.lat, post.lon)
let annotation = PostAnnotation(title: post.userName , subtitle: post.postContent, coordinate: location)
annotations.append(annotation)
}
mapView.addAnnotations(annotations)
}
这是自定义postAnnotation:
class PostAnnotation : NSObject , MKAnnotation{
var title: String?
var subtitle: String?
var coordinate: CLLocationCoordinate2D
init(title : String , subtitle : String , coordinate : CLLocationCoordinate2D) {
self.title = title
self.subtitle = subtitle
self.coordinate = coordinate
}
}
问题如何判断按哪个注释?我发现我可以使用mapkit委托方法来解除自定义注释,但是没有" indexPath"就像一张桌子视图,所以我怎么想告诉哪一个被按下了?
答案 0 :(得分:1)
在PostAnnotation
中添加一个额外字段,该字段是posts
数组中帖子的索引。
然后在mapView(MKMapView, didSelect: MKAnnotationView)
的实现中,你只需要获取被点击的视图的注释,然后使用索引从数组中获取帖子。
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
guard let postAnnotation = view.annotation as? PostAnnotation else {
return
}
let post = posts[postAnnotation.index]
// do something with post
}