自定义信息窗口上的按钮未在ios中接收操作

iSu*_*esh 5 cocoa-touch google-maps objective-c ios google-maps-sdk-ios

我在iOS应用程序中使用谷歌地图,并实现了一个自定义信息窗口,用于显示标记的标题.
现在,我在该自定义信息窗口上添加了一个按钮,但我的问题是没有调用按钮操作方法.

CustomInfoWindow.h

#import <UIKit/UIKit.h>

@interface CustomInfoWindow : UIView
@property (nonatomic,weak) IBOutlet UILabel *addressLabel;
@property(nonatomic) IBOutlet UIButton *button;
@end
Run Code Online (Sandbox Code Playgroud)

infoWindow.xib,我补充说

  • UILabeladdressLabel
  • UIButtonbutton

ViewController.h

#import "CustomInfoWindow.h"

@interface viewController : UIViewController<GMSMapViewDelegate>
{
  GMSMapView *mapView;
}
@end
Run Code Online (Sandbox Code Playgroud)

ViewController.m

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker
{
    NSLog(@"Mrker Tapped");

    CustomInfoWindow *infoWindow = [[[NSBundle mainBundle]loadNibNamed:@"infoWindow"
                                                                 owner:self
                                                               options:nil] objectAtIndex:0];
    infoWindow.addressLabel.text = marker.title;    

    [infoWindow.button addTarget:self action:@selector(ButtonPressed) 
                            forControlEvents:UIControlEventTouchUpInside];
    return infoWindow;
}

-(void)ButtonPressed
{
    NSLog(@"Button Pressed");
}
Run Code Online (Sandbox Code Playgroud)

基本上...... ButtonPressed方法不会开火.

sta*_*Man 5

我没有使用谷歌地图SDK但是在看了几个链接之后,看起来你想要完成的事情可能并不容易.

参考:https://developers.google.com/maps/documentation/android/infowindows
PS:这可能是Android文档,但它似乎也适用于iOS.

报价:

注意:绘制的信息窗口不是实时视图.视图在返回时呈现为图像(使用View.draw(Canvas)).这意味着对视图的任何后续更改都不会被地图上的信息窗口反映出来.要稍后更新信息窗口(例如,在加载图像后),请致电showInfoWindow().此外,信息窗口将不会考虑正常视图(例如触摸或手势事件)的任何典型交互.但是,您可以在整个信息窗口中收听通用点击事件,如下节所述.

您可以改为实现GMSMapViewDelegate的-didTapInfoWindowOfMarker:委托方法来检查是否已经点击了infowindow.
(缺点是整个infowindow成为一个按钮)


其他链接:

类似的问题1
类似的问题2