2011-10-21 17 views
10

Ho il mio mapview funzionante, ma il pin che si trova sulla mappa ha il titolo Stati Uniti. Come posso cambiare questo titolo?MKPlacemark pin title

MKCoordinateRegion thisRegion = {{0.0,0.0}, {0.0,0.0}}; 

     thisRegion.center.latitude = 22.569722; 
     thisRegion.center.longitude = 88.369722; 

     CLLocationCoordinate2D coordinate; 
     coordinate.latitude = 22.569722; 
     coordinate.longitude = 88.369722; 

     thisRegion.center = coordinate; 

     MKPlacemark *mPlacemark = [[[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil] autorelease]; 

     [mapView addAnnotation:mPlacemark]; 
     [mapView setRegion:thisRegion animated:YES]; 

risposta

13

Molto vecchia questione, ma forse qualcun altro si imbatte lo stesso problema (come ho fatto io):

Non aggiungere un MKPlacemark alle annotazioni della mappa; utilizzare invece MKPointAnnotation. Questa classe ha proprietà di titolo e sottotitoli che non sono di sola lettura. Quando li imposti, l'annotazione sulla mappa viene aggiornata di conseguenza e probabilmente è ciò che desideri.

Per usare MKPointAnnotation nel codice, sostituire le linee che allocano e aggiungere il MKPlacemark con questo codice:

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
annotation.coordinate = coordinate; 
annotation.title = NSLocalizedString(@"Dropped Pin", 
            @"Title of a dropped pin in a map"); 
[mapView addAnnotation:annotation]; 

È possibile impostare il titolo e le proprietà dei sottotitoli in un momento successivo, anche. Ad esempio, se è in esecuzione una query di indirizzo asincrona, è possibile impostare il sottotitolo sull'indirizzo dell'annotazione non appena l'indirizzo è disponibile.

5

Il seguente codice illustra mettendo un'annotazione su una mappa tramite CLGeocoder in iOS 5.1

-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 

CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 

// Apple recommendation - if location is older than 30s ignore 
// Comment out below during development 
/* if (fabs([newLocation.timestamp timeIntervalSinceDate:[NSDate date]]) > 30) { 
    NSLog(@"timestamp"); 
    return; 
}*/ 

CLLocation *coord = [[CLLocation alloc] initWithLatitude:locationManager.location.coordinate.latitude longitude:locationManager.location.coordinate.longitude];        
[geocoder reverseGeocodeLocation:coord completionHandler:^(NSArray *placemarks, NSError *error) { 

    if (error) { 
     NSLog(@"Geocode failed with error"); 
    } 

    // check for returned placemarks 
    if (placemarks && placemarks.count > 0) { 
     CLPlacemark *topresult = [placemarks objectAtIndex:0]; 
     MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
     annotation.coordinate = locationManager.location.coordinate; 
     annotation.title = NSLocalizedString(@"You are here", @"Title"); 
     annotation.subtitle = [NSString stringWithFormat:@"%@, %@", [topresult subAdministrativeArea], [topresult locality]]; 
     [self.mapView addAnnotation:annotation]; 
    } 
}]; 
} 
Problemi correlati