无法通过GMSMapView

时间:2015-04-28 16:52:52

标签: ios objective-c uiview gmsmapview

我已经使用XIB创建了一个自定义UIView,当用户通过实现markerInfoWindow来点击标记时,我会显示它

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker
{
    TESTInfoWindow *view =  [[[NSBundle mainBundle] loadNibNamed:@"TESTInfoWindow" owner:self options:nil] objectAtIndex:0];
    view.lblTitle.text = [marker title];
    return view;
}

一切正常,显示我的XIB并填充标题。

我的问题是我无法获得自定义UIView,TESTInfoWindow来响应触摸事件。 (我希望用户能够拖动自定义信息窗口,应用程序将根据touchesEnd事件做出响应。)

我在TESTInfoWindow中实现了touchesBegan和touchesMoved,但都没有被调用:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"DEBUG touchesBegan");  
}

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
        NSLog(@"DEBUG touchesMoved");  
}

我认为GMSMapView正在接收自定义信息窗口视图忽略的触摸。

如何让我的自定义UIView接收触摸?任何帮助赞赏。

1 个答案:

答案 0 :(得分:0)

我刚从这个链接Adding Click Event on InfoWindow/Marker in Google Maps SDK for native iOS/objective C

复制了你的答案

1.符合GMSMapViewDelegate协议。

@interface YourViewController () <GMSMapViewDelegate>
// your properties
@end

2.设置你的mapView_委托。

mapView_.delegate = self;

3.实现GMSMapViewDelegate方法

    - (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker {
        // your code
        NSNumber *number = [marker.userData objectForKey:@"marker_id"];
    }

btw,marker.userData很有用。您可以将所需数据设置到其中,并在- mapView:didTapInfoWindowOfMarker:

中使用它

例如,在GMSMarker对象上设置userData

GMSMarker *marker = [[GMSMarker alloc] init];
marker.userData = @{@"marker_id":[NSNumber numberWithInt:12]};