2011-11-29 10 views

risposta

15

C'è una proprietà sulla vista annotazione si può cambiare, una volta che la posizione dell'utente è stata aggiornata:

+0

A volte la posizione non può essere determinata e MKUserLocation diventa grigio. Callout è ancora visualizzato in quel caso. Questa risposta non è corretta. – Andy

+0

fare questo da solo non funziona per me su iOS 10. funziona in 'viewForAnnotation' funziona. –

12

È possibile impostare il title a vuoto per sopprimere la didascalia:

mapView.userLocation.title = @""; 


Edit:
Un modo più affidabile potrebbe essere a vuoto il titolo nel metodo didUpdateUserLocation delegato:

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    userLocation.title = @""; 
} 

o in viewForAnnotation:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>) annotation 
{ 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
    { 
     ((MKUserLocation *)annotation).title = @""; 
     return nil; 
    } 

    ... 
} 

L'impostazione del titolo nei metodi dei delegati consente di accertarsi di disporre di un'istanza di posizione utente reale con cui lavorare.

+0

Grazie! Sapevo che potevo cambiare il titolo e il sottotitolo, ma non sapevo che impostare il titolo su una stringa vuota lo avrebbe soppresso. – charudatta

+0

La risposta di @jowie è migliore. Usa invece quel metodo. – Anna

+0

@Anna è stato giocherellando ma non ha avuto successo - qualsiasi idea su come sopprimere completamente la bolla di callout predefinita (come sopra, e sì, @jowie risponde probabilmente meglio) senza bloccare 'mapView: didSelectedAnnotationView:' per essere chiamato? –

0

mi hanno due modi per aiutare a:

  1. Sopprimere nella mapViewDidFinishLoadingMap

    func mapViewDidFinishLoadingMap(_ mapView: MKMapView) { 
    mapView.showsUserLocation = true 
    //suppress the title 
    mapView.userLocation.title = "My Location" 
    //suppress other params 
    

    }

  2. sopprimere nel didUpdate

    func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) { 
        //suppress the title 
        mapView.userLocation.title = "My Location" 
        //suppress other params 
    } 
    
0

Swift 4

// MARK: - MKMapViewDelegate 

func mapViewDidFinishLoadingMap(_ mapView: MKMapView) { 
    if let userLocationView = mapView.view(for: mapView.userLocation) { 
     userLocationView.canShowCallout = false 
    } 
}