Agregar evento Click en InfoWindow / Marker en Google Maps SDK para iOS nativo / objective C

Pregunta simple

Estoy trabajando en una aplicación para iOS donde incrusté el nuevo Google Map para iOS nativo. Todo funciona bien, excepto un problema en el que no puedo encontrar una solución propper para IOS / Objective-C nativo ni aquí ni en google (si hay uno, por favor muéstrame y lo siento por molestarte)

Lo que quiero: Quiero que el usuario click el marcador que abre la window de información. Después de que haga clic o toque la window de información, debería abrir una nueva UIView con más información.

¿Cómo puedo hacer eso?

Gracias por consejos

    1.conformar al protocolo GMSMapViewDelegate .

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

    2. configure su delegado mapView_ .

     mapView_.delegate = self; 

    3.implementar el método GMSMapViewDelegate

     - (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker { // your code } 

    btw, marker.userData es útil. puede establecer sus datos necesarios en él y usarlo en - mapView:didTapInfoWindowOfMarker:

    donde agrega Mapa, agregue

      mapView_.delegate=self; 

    entonces usa esto

     -(void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(id<GMSMarker>)marker{ //info window tapped } 

    Estoy usando Google Maps SDK para iOS.

    He subclassado uiview para crear una vista personalizada "InfoWindow" para infowindow.

    agregue @property (nonatomic, retain) UIView * actionOverlayCalloutView; en el file de encabezado de su viewcontroller.

     - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { if(self.objSelectedParking != nil) { float anchorSize = 0.5f; float infoWindowWidth = 250.0f; float infoWindowHeight = 250.0f; [self.actionOverlayCalloutView removeFromSuperview]; InfoWindow *infoWindow = [[InfoWindow alloc] initWithFrame:CGRectMake(0, 0, infoWindowWidth, infoWindowHeight)]; infoWindow.lblTitle.text = self.objSelectedParking.strParkingName; infoWindow.lblDescription.text = self.objSelectedParking.strParkingDescription; infoWindow.lblAddress.text = self.objSelectedParking.strParkingAddress; infoWindow.lblPhone.text = self.objSelectedParking.strParkingPhone; infoWindow.imageViewParking.image = [UIImage imageNamed:@"parking_image_sample.jpg"]; float offset = anchorSize * M_SQRT2; self.actionOverlayCalloutView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, infoWindowWidth, infoWindowHeight - offset/2)]; [self.actionOverlayCalloutView setBackgroundColor:[UIColor clearColor]]; self.actionOverlayCalloutView.layer.cornerRadius = 5; self.actionOverlayCalloutView.layer.masksToBounds = YES; UIButton *hiddenCloseButton = [[UIButton alloc] initWithFrame:CGRectMake((infoWindow.viewContainer.frame.origin.x + infoWindow.viewContainer.frame.size.width - 30), 10, 20, 20)]; [hiddenCloseButton addTarget:self action:@selector(hiddenCloseButtonClickedInInfowindow:) forControlEvents:UIControlEventTouchUpInside]; [self.actionOverlayCalloutView addSubview:hiddenCloseButton]; UIButton *hiddenDirectionButton = [[UIButton alloc] initWithFrame:CGRectMake((infoWindow.lblAddress.frame.origin.x + infoWindow.lblAddress.frame.size.width + 5), (infoWindow.lblAddress.frame.origin.y - 15), 25, 25)]; [hiddenDirectionButton addTarget:self action:@selector(hiddenDirectionButtonClickedInInfowindow:) forControlEvents:UIControlEventTouchUpInside]; [self.actionOverlayCalloutView addSubview:hiddenDirectionButton]; UIButton *hiddenInfoButton = [[UIButton alloc] initWithFrame:CGRectMake((infoWindow.innerContainerView.frame.origin.x + infoWindow.imageViewParking.frame.origin.x + infoWindow.imageViewParking.frame.size.width + 20), (infoWindow.innerContainerView.frame.origin.y + 25), 25, 25)]; [hiddenInfoButton addTarget:self action:@selector(hiddenInfoButtonClickedInInfowindow:) forControlEvents:UIControlEventTouchUpInside]; [self.actionOverlayCalloutView addSubview:hiddenInfoButton]; UIButton *hiddenScheduleButton = [[UIButton alloc] initWithFrame:CGRectMake((infoWindow.innerContainerView.frame.origin.x + infoWindow.verticalLineSeperatorView.frame.origin.x + infoWindow.verticalLineSeperatorView.frame.size.width + 10), (infoWindow.innerContainerView.frame.origin.y + 25), 25, 25)]; [hiddenScheduleButton addTarget:self action:@selector(hiddenScheduleButtonClickedInInfowindow:) forControlEvents:UIControlEventTouchUpInside]; [self.actionOverlayCalloutView addSubview:hiddenScheduleButton]; [infoWindow addSubview:self.actionOverlayCalloutView]; CLLocationCoordinate2D anchor = [_mapView.selectedMarker position]; CGPoint point = [_mapView.projection pointForCoordinate:anchor]; point.y -= _mapView.selectedMarker.icon.size.height + offset/2 + (infoWindowHeight - offset/2)/2; self.actionOverlayCalloutView.center = point; [_mapView addSubview:self.actionOverlayCalloutView]; return infoWindow; } return nil; } -(void)mapView:(GMSMapView *)pMapView didChangeCameraPosition:(GMSCameraPosition *)position { if (pMapView.selectedMarker != nil && self.actionOverlayCalloutView.superview) { float anchorSize = 0.5f; float infoWindowHeight = 250.0f; CLLocationCoordinate2D anchor = [_mapView.selectedMarker position]; CGPoint point = [_mapView.projection pointForCoordinate:anchor]; float offset = anchorSize * M_SQRT2; point.y -= _mapView.selectedMarker.icon.size.height + offset/2 + (infoWindowHeight - offset/2)/2; point.y = point.y - 10; //PRATIK GUJARATI CODE TO ADJUST HEIGHT AND Y VALUE OF TRANSPARENT OVERLAY VIEW self.actionOverlayCalloutView.center = point; } else { [self.actionOverlayCalloutView removeFromSuperview]; } } - (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate { [self.actionOverlayCalloutView removeFromSuperview]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"mapView.selectedMarker"]) { if (!_mapView.selectedMarker) { [self.actionOverlayCalloutView removeFromSuperview]; } } } 
    1. Cree una subvista que desee mostrar en infoWindow.

    2. Establecer el marco de la subvista es igual al marco de la vista infoWindow.

       subView = [[[NSBundle mainBundle] loadNibNamed:@"viewName" owner:self options:nil] objectAtIndex:0]; [subView setFrame:infoview.frame]; [self.mapview addSubview:subView];