注册 登录
主题 : 高德地图关于大头针选中问题
级别: 新手上路

状态: 连续签到 - [12天]
UID: 579031
精华: 0
发帖: 30
可可豆: 194 CB
威望: 157 点
在线时间: 80(时)
注册时间: 2016-08-22
最后登录: 2017-09-20
0 楼:  发表于: 2016-10-20 11:24    发自: Web Page
来源于 一般提问 分类

高德地图关于大头针选中问题   





大神们!()
       我是通过for循环批量添加的大头针,大头针气泡中定义了右边按钮,点击push到一个界面并传递对应的annoID(通过请求解析的大头针数据中  大头针的id)参数。
请问有什么办法可以确定我点击的是哪一个大头针气泡里面的按钮?有什么办法可以将annoID传到push的界面。
下面的我添加打头阵的代码,请大神指教!

- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
updatingLocation:(BOOL)updatingLocation
{
//    _mapView.centerCoordinate = userLocation.coordinate;
NSString *latitude = [NSString stringWithFormat:@"%f", userLocation.coordinate.latitude];
NSString *longitude = [NSString stringWithFormat:@"%f", userLocation.coordinate.longitude];
if(updatingLocation)
    {
//        //取出当前位置的坐标
//        NSString *identifierForVendor = [[UIDevice currentDevice].identifierForVendor UUIDString];
//        NSLog(@"identifierForVendor:%@,latitude: %@,longitude: %@", identifierForVendor, latitude, longitude);
/*
         id = 500750;
         jingDu = "121.36022";
         mtbh = 370602019102;
         mtdz = "\U673a\U573a\U8def";
         weiDu = "37.461582";
         */
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [HttpTool getWithPath:@"/a/mobile/mobile/advertLocationJcbg"
params:@{@"jingDu": longitude, @"weiDu": latitude, @"jczt": @"0"}
success:^(id JSON) {
NSDictionary *dictArray = JSON;
//                              NSLog(@"dictArray:%@",dictArray);
NSMutableArray *latitudeArr = [NSMutableArray array];
NSMutableArray *longitudeArr = [NSMutableArray array];
NSMutableArray *annoID = [NSMutableArray array];
for (NSDictionary *dataDic in dictArray[@"message"]) {
                                  [longitudeArr addObject:dataDic[@"jingDu"]];
                                  [latitudeArr addObject:dataDic[@"weiDu"]];
                                  [annoID addObject:dataDic[@"id"]];
                              }
                              [_mapView removeAnnotations:self.advertisingLocationArray];
                              [self.advertisingLocationArray removeAllObjects];
for(int i = 0; i < [latitudeArr count]; i++) {
CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake([latitudeArr doubleValue], [longitudeArr doubleValue]);
MAPointAnnotation *a1 = [[MAPointAnnotation alloc] init];
                                  a1.coordinate = coordinates;

                                  [self.advertisingLocationArray addObject:a1];
                                  [self.mapView addAnnotations:self.advertisingLocationArray];
                              }

                          } failure:^(NSError *error) {
NSLog(@"error:%@", error);
                          }];
        });
    }
}


//添加标注方法
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation
{
if ([annotation isKindOfClass:[MAPointAnnotation class]])
    {
static NSString *pointReuseIndentifier = @"pointReuseIndentifier";
MAPinAnnotationView *annotationView = (MAPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:pointReuseIndentifier];

if (annotationView == nil)
        {
            annotationView = [[MAPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pointReuseIndentifier];
        }
        annotationView.canShowCallout= YES;       //设置气泡可以弹出,默认为NO
        annotationView.animatesDrop = YES;        //设置标注动画显示,默认为NO
        annotationView.draggable = YES;        //设置标注可以拖动,默认为NO
        annotationView.pinColor = MAPinAnnotationColorRed; //设置大头针颜色
//        annotationView.image = [UIImage imageNamed:@"category_3"];
//设置大头针气泡内部按钮
UIButton *navigationBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 35)];//设置左边导航按钮
        navigationBtn.backgroundColor = [UIColor purpleColor];
        [navigationBtn setTitle:@"导航" forState:UIControlStateNormal];
        navigationBtn.layer.masksToBounds = YES; //设置圆角
        navigationBtn.layer.cornerRadius = 8.0; //设置圆角尺度
UIButton *informationBtn = [[UIButton alloc] initWithFrame:CGRectMake(0 , 0, 100, 35)];//设置右边媒体信息按钮
        informationBtn.backgroundColor = [UIColor purpleColor];
        [informationBtn setTitle:@"媒体信息" forState:UIControlStateNormal];
        informationBtn.layer.masksToBounds = YES; //设置圆角
        informationBtn.layer.cornerRadius = 8.0; //设置圆角尺度
        [informationBtn addTarget:self action:@selector(informationBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        annotationView.rightCalloutAccessoryView  = informationBtn;//添加右边按钮
        annotationView.leftCalloutAccessoryView = navigationBtn;//添加左边按钮

return annotationView;
    }
return nil;
}




关键词: ios 开发 iphone开发
级别: 骑士

状态: 连续签到 - [216天]
UID: 405098
精华: 0
发帖: 247
可可豆: 1642 CB
威望: 1251 点
在线时间: 514(时)
注册时间: 2014-11-22
最后登录: 2017-12-14
1 楼:  发表于: 2016-10-20 11:52    发自: Web Page
回 楼主(1140883381) 的帖子
你可以写一个类,继承MAPointAnnotation,这个类写一个属性id,来标识每一个大头针,点击的时候,在大头针点击代理方法里拿到该大头针,用id去区分。
简约!
级别: 骑士

状态: 连续签到 - [216天]
UID: 405098
精华: 0
发帖: 247
可可豆: 1642 CB
威望: 1251 点
在线时间: 514(时)
注册时间: 2014-11-22
最后登录: 2017-12-14
2 楼:  发表于: 2016-10-20 11:54    发自: Web Page
回 楼主(1140883381) 的帖子
你的需求要不要出气泡啊?如果不用显示气泡的话,你用大头针的title属性做唯一标识也行,就不用自己封装了。
简约!
级别: 新手上路

状态: 连续签到 - [12天]
UID: 579031
精华: 0
发帖: 30
可可豆: 194 CB
威望: 157 点
在线时间: 80(时)
注册时间: 2016-08-22
最后登录: 2017-09-20
3 楼:  发表于: 2016-10-20 12:55    发自: Web Page
回 2楼(孟祥) 的帖子
需要气泡的,气泡里面右边按钮属性会push到一个界面
级别: 骑士

状态: 连续签到 - [216天]
UID: 405098
精华: 0
发帖: 247
可可豆: 1642 CB
威望: 1251 点
在线时间: 514(时)
注册时间: 2014-11-22
最后登录: 2017-12-14
4 楼:  发表于: 2016-10-20 13:32    发自: Web Page
回 3楼(1140883381) 的帖子
那你得自己定制了。有什么更好的方法的话,给我说一声。
简约!
级别: 新手上路

状态: 连续签到 - [12天]
UID: 579031
精华: 0
发帖: 30
可可豆: 194 CB
威望: 157 点
在线时间: 80(时)
注册时间: 2016-08-22
最后登录: 2017-09-20
5 楼:  发表于: 2016-10-20 13:35    发自: Web Page
回 4楼(孟祥) 的帖子
我觉得一楼的方法就不错  不过我还没试,解决了告诉你
级别: 骑士

状态: 连续签到 - [216天]
UID: 405098
精华: 0
发帖: 247
可可豆: 1642 CB
威望: 1251 点
在线时间: 514(时)
注册时间: 2014-11-22
最后登录: 2017-12-14
6 楼:  发表于: 2016-10-20 13:55    发自: Web Page
回 5楼(1140883381) 的帖子
一楼就是我我就是一楼。
简约!
级别: 新手上路

状态: 连续签到 - [12天]
UID: 579031
精华: 0
发帖: 30
可可豆: 194 CB
威望: 157 点
在线时间: 80(时)
注册时间: 2016-08-22
最后登录: 2017-09-20
7 楼:  发表于: 2016-10-20 13:56    发自: Web Page
回 1楼(孟祥) 的帖子
但是好像并不能继承MAPointAnnotation类啊
级别: 新手上路
UID: 561089
精华: 0
发帖: 53
可可豆: 144 CB
威望: 134 点
在线时间: 159(时)
注册时间: 2016-05-04
最后登录: 2018-03-28
8 楼:  发表于: 2016-11-17 12:22    发自: Web Page
这个需求我已经搞定了,直接创建一个继承于NSObject<MAAnnotation>类,然后在类中添加属性和初始化方法- (id)initWithpoiModel:(POIModel *)poiModel;

@property (nonatomic, strong) POIModel * poiModel;@property (nonatomic, assign) CLLocationCoordinate2D coordinate;调用起来就不用说了吧,但是我遇到了这个奇葩的问题,就是大头针点击的时候第一下不触发mapView的代理事件,当我第一次点击了大头针A的时候,不反应,那么再次点击A是无效的,点击大头针B又是可以的,push过去后我在pop回来点击B又是无效的,点击A又有了效果

级别: 新手上路
UID: 471122
精华: 0
发帖: 1
可可豆: 1 CB
威望: 1 点
在线时间: 111(时)
注册时间: 2015-05-09
最后登录: 2018-04-27
9 楼:  发表于: 2016-11-17 12:30    发自: Web Page
回 8楼(Mr_liqiaolong) 的帖子
你遇到的问题和我的一模一样,我现在也在崩溃呢,有没有什么好的处理办法吗?  我的是第一次点击,可以 push ,在回过来,重新点它,就不走代理,切换点别的就可以,只能切换点击,不能重复点击>>>>>>>>>>

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部