在ios中使用BMKPointAnnotation来创建定位点的泡泡,点击泡泡也可以监听到点击
-(void)viewDidLoad{ [super viewDidLoad]; ... // 添加一个PointAnnotation BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init]; CLLocationCoordinate2D coor; coor.latitude = 39.915; coor.longitude = 116.404; annotation.coordinate = coor; annotation.title = @"这里是北京"; [mapView addAnnotation:annotation]; } - (void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view{ NSLog(@"paopaoclick"); }
上面这段代码是添加了一个泡泡,点击泡泡监听到点击,但是有个问题就是如果有多个泡泡,我不知道是哪个点击的,通过BMKAnnotationView无法获取到BMKPointAnnotation,并且BMKPointAnnotation无法设置tag,查询官方示例也没查到,百度了很久也没查到,这两个完全是脱节的,在单击的监听方法里无法知道是哪个点击的,也不可能用经纬度再从数据里再去查一遍,如果有相同的经纬度查询就会有问题。
后来终于查到一个方法可以解决这个问题,看下面代码:
-(void)viewDidLoad{ [super viewDidLoad]; ... // 添加一个PointAnnotation BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init]; CLLocationCoordinate2D coor; coor.latitude = 39.915; coor.longitude = 116.404; annotation.coordinate = coor; annotation.title = @"这里是北京"; [mapView addAnnotation:annotation]; BMKAnnotationView* aview = [mapView viewForAnnotation:annotation]; aview.tag = 1; } - (void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view{ NSLog(@"paopaoclick___tag:%d",view.tag); }
用上面代码从mapView里的viewForAnnotation方法根据anntation生成对应的View,然后设置一下tag就可以了,我没找到其它办法,如果大家知道其它更好的办法请告诉我。