0

我已经使用 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 接收触摸?任何帮助表示赞赏。

4

1 回答 1

0

我刚刚从这个链接为您复制了答案在 Google Maps SDK for native iOS/objective C 中的 InfoWindow/Marker 上添加 Click Event

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"];
    }

顺便说一句,marker.userData很有用。您可以将所需的数据设置到其中并在其中使用- mapView:didTapInfoWindowOfMarker:

例如在 GMSMarker 对象上设置 userData

GMSMarker *marker = [[GMSMarker alloc] init];
marker.userData = @{@"marker_id":[NSNumber numberWithInt:12]};
于 2015-12-10T12:55:44.440 回答