我在Google Maps for iOS上遵循了Code School教程,并且能够获取一个获取的数组(来自NSManagedObject
)并分配标记标题,片段和userData并返回NSSet
个标记显示在地图上。
现在我想在点击标记infoWindow时显示数组对象的详细视图。我是iOS初学者,我不知道如何从infoWindow回到对象。
在文档中指出,Goggle地图上的infoWindows只是图像,不能有按钮或交互式部分,因此我不知道如何索引infoWindow。
我在这里找到了一个问题的答案,其中附加了一个透明按钮,覆盖了didTapInfoWindowOfMarker
方法,并使用了其他委托方法来移动按钮。
该问题的解决方案很好,但我想通过使用已写入sdk的帮助程序代码解决我的问题(即我想使用didTapInfoWindowOfMarker
方法)。
有人可以解释一下如何做到这一点吗?
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"MarkerDetail"])
{
UINavigationController *navigationController = segue.destinationViewController;
LocationDetailsViewController *controller = (LocationDetailsViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
//Code to turn the marker back into a Location object
//and fill in the detailViewController
controller.locationToView =location;
}
}
- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker
{
[self performSegueWithIdentifier:@"MarkerDetail" sender:marker];
}
成功!我找到了一种可爱的方式来实现我想要的。这是我的解决方案。
- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker
{
UINavigationController *navigationController = (UINavigationController *) [self.storyboard instantiateViewControllerWithIdentifier:@"DetailNavC"];
NSString *markerCategory=[marker.userData objectAtIndex:0];
NSString *markerName=[marker.userData objectAtIndex:1];
UIImage *markerImage=[marker.userData objectAtIndex:2];
CLPlacemark *markerPlacemark=[marker.userData objectAtIndex:3];
InfoViewController *ivc = (InfoViewController *)navigationController.topViewController;
ivc.category=markerCategory;
ivc.name=markerName;
ivc.image=markerImage;
ivc.placemark=markerPlacemark;
[self presentViewController:(UINavigationController *)navigationController animated:YES completion:nil];
}
答案 0 :(得分:1)
创建标记并将其添加到地图时,将其userData
属性设置为包含所需信息的对象。
然后在didTapInfoWindowOfMarker
中将marker.userData
强制转换回该类型,并将数据传递到目标视图。