【发布时间】:2015-08-31 03:11:47
【问题描述】:
我正在开发谷歌地图 iOS sdk。在这里,我在不同的位置坐标中创建了多个标记。
现在我需要为所有标记添加诸如 TAG 之类的标识符,以便对特定标记执行操作。
如果 TAG 或其他标识符选项在 google map iOS sdk 中不可用,请建议我如何存档。
提前致谢。
【问题讨论】:
标签: ios objective-c google-maps google-maps-sdk-ios
我正在开发谷歌地图 iOS sdk。在这里,我在不同的位置坐标中创建了多个标记。
现在我需要为所有标记添加诸如 TAG 之类的标识符,以便对特定标记执行操作。
如果 TAG 或其他标识符选项在 google map iOS sdk 中不可用,请建议我如何存档。
提前致谢。
【问题讨论】:
标签: ios objective-c google-maps google-maps-sdk-ios
Swift 解决方案:
您可以通过为标记的键设置值来为标记添加标识符或任何东西:
marker.setValue("20", forKey: "id")
您可以稍后使用:
marker.value(forKey: "id")
或者
我的方法是为 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 更清晰可读吗??
【讨论】:
我所做的是简单地继承 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;
}
【讨论】: