Загрузка данных в представления в зависимости от выноски аннотации MapKit - PullRequest
0 голосов
/ 25 августа 2010

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

Как пометить, какая аннотация была нажата, чтобы я мог загрузить правильные данные через контроллер представления детали?

1 Ответ

2 голосов
/ 25 августа 2010

Вы можете реализовать функцию загрузки данных в своем классе аннотаций.Для этого вам понадобится ссылка на эти данные в вашем классе аннотаций.

Ваш класс аннотаций может быть чем-то вроде

@interface MyAnnotation : NSObject<MKAnnotation> {
     CLLocationCoordinate2D coordinate;

     MyDataObject *mydataObject;
}

- (id) initWithCoordinate:(CLLocoationCoordinate2D)coord withMyData:(MyDataObject*)aDataObject;
- (void) loadDetailView;   // this function will load the data in myDataObject to the DetailView

. Чтобы получить сенсорный вызов, вы можете реализовать функцию calloutAccessaryControlTapped в контроллере, где вы реализуете MKMapViewDelegate.

Функция будетбыть что-то вроде

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
      MyAnnotation *myAnnotation = (MyAnnotation*)view.annotation;
      [myAnnotation loadDetailView];
}

Edit

Реализация initWithCoordinate будет выглядеть примерно так:

@implementation MyAnnotation

....

- (id) initWithCoordinate:(CLLocoationCoordinate2D)coord withMyData:(MyDataObject*)aDataObject{
    coordinate = coord;    // cannot use "self.coordinate" here as CLLocationCoordinate2D is double instead of object (?)

    self.title = <# some name #> // assign some string to the title property

    self.mydataObject = aDataObject; // this is your data object

    return self;
}

....
...