【问题标题】:GoogleMaps for iOS infoWindow to segue with data from entityGoogleMaps for iOS infoWindow 与来自实体的数据进行 segue
【发布时间】:2014-05-08 17:26:26
【问题描述】:

我遵循了 iOS 版 Google 地图上的 Code School 教程,能够获取一个获取的数组(来自 NSManagedObject)并分配标记标题、sn-p 和 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];

}

【问题讨论】:

  • 我认为最接近我想要的结果的方法是为我的 destinationViewController 设置一个转场,然后在 didTapInfoWindowOfMarker 方法中调用转场。我将发布一个包含两者代码的编辑。

标签: ios google-maps-sdk-ios


【解决方案1】:

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

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

【讨论】:

  • 好的,这个建议让我有所收获。我为 marker.userData 创建了一个数组对象,用名称、地址、图像、文本填充它,然后在 didTapInfoWindowOfMarker 中实例化了一个 detailsViewController 并将它的标签和图像视图设置为适当的 objectAtIndex 值。我记录了输出以确保它正在传递数据。到目前为止一切顺利。
  • 我尝试使用的 segue 仍然没有传递任何数据。在我的故事板中,它看起来像是源自地图视图,而不是任何特定的标记或数组对象。接下来我会尝试 presentViewController:detailsViewController 看看效果如何。你可以混合使用笔尖和情节提要吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
相关资源
最近更新 更多