如何在Google Map iOS SDK中获取特定的Marker id

问题描述 投票:0回答:2

我正在开发谷歌地图iOS sdk。在这里,我在不同的位置坐标中创建多个标记。

现在我需要为所有标记添加标识符,例如 TAG,以便对特定标记执行操作。

如果谷歌地图 iOS sdk 中没有 TAG 或其他标识符选项,请建议我如何存档它。

提前致谢。

ios objective-c google-maps google-maps-sdk-ios
2个回答
9
投票

我所做的就是简单地继承 GMSMarker 并像这样添加我需要的任何数据,我想这是您拥有的最好和最简单的选择。

@interface ATGoogleMapsSelectiveMarker : GMSMarker

@property (nonatomic) int markerID;
@property (nonatomic) int order;
@property (strong, nonatomic) NSObject* referenceObject;
@property (nonatomic) BOOL selected;

@end

编辑:

我认为很清楚,但我将继续如何获取数据...当您创建标记并将其添加到地图时,您创建 ATGoogleMapsSelectiveMarker 并在填充所需的所有内容后将其添加到地图,然后你注册任何你想要的类作为实现 GMSMapViewDelegate 的委托,并实现这个方法

- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker {
    // Here you are sure that your marker object is of type ATGoogleMapsSelectiveMarker but it won't harm to double check
   if ([marker isKindOfClass:[ATGoogleMapsSelectiveMarker class]]) {
       ATGoogleMapsSelectiveMarker* parsedMarker = (ATGoogleMapsSelectiveMarker*)marker;
       NSLog(@"%d", parsedMarker.markerId);
   }

    return YES;
}

3
投票

Swift解决方案:

我的方法是为 GMSMarker 创建扩展并使用 userData 属性使 GMSMarker 满足我的需要,对我来说,我想添加带有 Branch 类实例的每个标记(带有某些公司分支机构的标记的映射)这就是我所做的:

extension GMSMarker {
    var branch: Branch {
        set(branch) {
            self.userData = branch
        }

        get {
           return self.userData as! Branch
       }
   }
}

所以当我设置标记属性时,我将其设置如下:

marker.branch = someBranch

这不是比marker.userData = someBranch 更清晰、更具可读性吗?

© www.soinside.com 2019 - 2024. All rights reserved.