Если вы используете пользовательские аннотации, вы можете добавить наблюдателя для выбранного свойства, который будет действовать как делегат при выборе пина.
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
MKAnnotation *annview = ...code to either dequeue or create new object...
[annview addObserver:self forKeyPath:@"selected" options:NSKeyValueObservingOptionNew context:@"selectedmapannotation"];
return annview;
}
тогда вы можете контролировать выбранное состояние с помощью
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context;
Ответ, связанный с Mugunth Kumar, также даст вам желаемые результаты, просто вы упомянули делегатскую функциональность в своем вопросе.
EDIT:
Вот пример содержимого наблюдаемого значенияValueForKeyPath: ofObject: change: context: method
NSString *action = (NSString*)context;
if([action isEqualToString:@"selectedmapannotation"]){
BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
MKAnnotationView *ann = (MKAnnotationView *)object;
if (annotationAppeared) {
// do something with the annotation when it is selected
}
else {
// do something with the annotation when it is de-selected
}
}