Как подавить выноску «Текущее местоположение» в представлении карты - PullRequest
13 голосов
/ 30 ноября 2011

Нажатие на пульсирующий синий кружок, обозначающий userLocation, вызывает вызов «Текущее местоположение»Есть ли способ подавить это?

Ответы [ 6 ]

18 голосов
/ 23 апреля 2012

В представлении аннотаций есть свойство, которое можно изменить после обновления местоположения пользователя:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    MKAnnotationView *userLocationView = [mapView viewForAnnotation:userLocation];   
    userLocationView.canShowCallout = NO;
}    
17 голосов
/ 30 ноября 2011

Вы можете установить title пустым для подавления выноски:

mapView.userLocation.title = @"";


Edit:
Более надежным способом может быть очистка заголовка в методе делегата didUpdateUserLocation:

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

или viewForAnnotation:

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

    ...
}

Установка заголовка в методах делегата позволяет вам быть уверенным, что у вас есть настоящий экземпляр userLocation для работы.

2 голосов
/ 03 марта 2018

Свифт 4

// MARK: - MKMapViewDelegate

func mapViewDidFinishLoadingMap(_ mapView: MKMapView) {
    if let userLocationView = mapView.view(for: mapView.userLocation) {
        userLocationView.canShowCallout = false
    }
}
1 голос
/ 18 марта 2018

Swift 4 - Xcode 9.2 - iOS 11.2

// MARK: - MKMapViewDelegate

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
  if let userLocation = annotation as? MKUserLocation {
    userLocation.title = ""
    return nil
  }
  // ...
}
0 голосов
/ 11 мая 2018

SWIFT версия

Нам нужно установить для свойства пользователя MKAnnotationView canShowCallout значение false, когда mapView добавляет пользователя MKAnnotationView

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
    for view in views {
        if view.annotation is MKUserLocation {
            view.canShowCallout = false
        }
    }
}
0 голосов
/ 06 декабря 2017

У меня есть два способа помочь вам:

  1. подавить в карте ViewDidFinishLoadingMap

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

    }

  2. подавить в didUpdate

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