GoogleMaps for iOS infoWindow可以从实体中获取数据

时间:2014-05-08 17:26:26

标签: ios google-maps-sdk-ios

我在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];

}

1 个答案:

答案 0 :(得分:1)

创建标记并将其添加到地图时,将其userData属性设置为包含所需信息的对象。

然后在didTapInfoWindowOfMarker中将marker.userData强制转换回该类型,并将数据传递到目标视图。