【发布时间】: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 方法中调用转场。我将发布一个包含两者代码的编辑。