У всех ваших классов аннотаций может быть какой-то распространенный метод, например -annotationView
.Вы можете получить все классы аннотаций из общего суперкласса или просто создать протокол.Затем проверьте, что аннотация действительно отвечает селектору или является подклассом вашего общего класса, и запросите его для просмотра:
if ([annotation respondsToSelector:@selector(annotationView)]) {
return [annotation annotationView];
}
или
if ([annotation isKindOfClass:[AbstractAnnotation class]]) {
return [annotation annotationView];
}
Одна из причин не , чтобы сделать это, так как объекты, которые вы используете в качестве аннотаций, часто являются частями вашей модели данных, и они могут не иметь никакого бизнеса, ничего не знающего о представлениях аннотаций.Одно дело быть в состоянии предоставить заголовок, подзаголовок и местоположение;предоставление фактического экземпляра представления часто выходит за рамки того, что должен делать объект модели.
Имейте в виду, что представления аннотаций обычно не делают слишком много, кроме отображения изображения и обеспечивают левое и правоеаксессуары для просмотра выноски.Действительно ли вам понадобятся сотни различных подклассов аннотаций?Или вы можете использовать общий вид аннотации для всех своих аннотаций и просто настроить их по-разному (например, путем изменения изображения вида аннотации)?