101 iOS MapKit, координаты и переменные объекта, а кнопки нет? - PullRequest
0 голосов
/ 30 марта 2012

При использовании библиотеки MapKit и размещении булавки / MKAnnotation вы реализуете класс MKAnnotation, имеющий координаты, имя и описание:

@interface MyAnnotationClass : NSObject <MKAnnotation> {
    NSString *_name;
    NSString *_description;
    CLLocationCoordinate2D _coordinate;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
-(id) initWithCoordinate:(CLLocationCoordinate2D) coordinate;
@end

Эти основные сведения отображаются, когда булавка помещена накарта.Однако, когда вы хотите, чтобы на том же выводе была кнопка, вы реализуете следующий метод в делегате MapViews:

-(MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id <MKAnnotation>)annotation {
    ...
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    return(annotationView);
}

Почему это соглашение?Я ожидаю, что 'rightCalloutAccessory' будет частью MKAnnotation.Я знаю, что это необязательно, может ли быть так, что объект rightCallout является частью более конкретного метода?

Меня смущает, потому что вы устанавливаете атрибуты Пина при создании объекта MKAnnotation, но затем устанавливаете другие атрибуты, когда этот пин размещается на карте.Почему оба они не сделаны в одном и том же месте?Можно ли сделать это таким образом?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Обычно протокол MKAnnotation реализуется объектами модели.Слой модели не должен ничего знать о представлениях.Таким образом, для соблюдения шаблона MVC представление выноски не может быть частью MKAnnotation объекта.

1 голос
/ 30 марта 2012

Философия, лежащая в основе этого, заключается в том, чтобы отложить необходимость устанавливать всю информацию на виде, когда это действительно необходимо, вместо того, чтобы иметь сложный граф объектов на картах. Это позволяет вам также откладывать решения.

Кроме того, вы заметили, что говорите о двух разных вещах: одна - аннотация, другая - вид.

...