2016-05-14 5 views
0

Прямо сейчас мое приложение имеет несколько маркеров в разных местах. Если вы нажмете маркер, появится небольшое окно, включающее заголовок и фрагмент. Я хотел бы реализовать кнопку в окне или сделать информационное окно tappable, поэтому он работает как кнопка для выполнения функции. Так что я написал этот блок в моем GoogleMapsViewController.swift:didTapInfoWindowOfMarker on iOS App Swift

func mapView(mapView: GMSMapView, didTapInfoWindowOfMarker marker: GMSMarker) { 

    print("test") 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("jobDetailVC") as! JobDetailViewController 

    if let value = marker.userData as? PFObject { 
     vc.name = value.objectForKey("name") as? String 
     vc.descriptionF = value.objectForKey("description") as? String 
     vc.price = value.objectForKey("price") as? Double 
     vc.objectId = value.objectId! 
    } 
} 

Причина, почему я использую: didTapInfoWindowOfMarker, потому что я не был уверен, как осуществить это, так что я прочитал доку с Google Maps: https://developers.google.com/maps/documentation/ios-sdk/reference/protocol_g_m_s_map_view_delegate-p?hl=es и подумал, что это лучший выбор.

Кто-нибудь успешно реализовал это или что-то подобное? Заранее спасибо за помощь!

ответ

2

Вы можете использовать функцию didTapInfoWindowOfMarker, чтобы добавить событие в свой InfoWindow.

При добавлении карты, добавьте:

mapView_.delegate=self; 

Затем использовать эту функцию, чтобы добавить событие/функцию InfoWindow при нажатии:

-(void)mapView:(GMSMapView *)mapView 
didTapInfoWindowOfMarker:(id<GMSMarker>)marker{ 

    //Info window function 

} 

Пример на GitHub:

// when user tap the info window of store marker, show the product list 
    func mapView(mapView: GMSMapView!, didTapInfoWindowOfMarker marker: GMSMarker!) { 
     let storeMarker = marker as StoreMarker 
     performSegueWithIdentifier("productMenu", sender: storeMarker.store) 
    } 

// when user tap the info window of store marker, pass selected store to the product list controller 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let controller = segue.destinationViewController as ProductMenuController 
     controller.store = sender as Store 
    } 

func mapView(mapView: GMSMapView, didTapInfoWindowOfMarker marker: GMSMarker) { 

     for location in locations { 
      let pollution = location[0] 
      if pollution.locationdesc == marker.title { 
       performSegueWithIdentifier(segueIdentifiers.locations, sender: location) 
       break 
      } 
     } 
    } 

Проверить это связано вопрос: