В методе displayArrow:
вы можете получить ссылку на аннотацию, по которой щелкнули, используя:
DetailMap *hospitalInfo
= (DetailMap *)[mapView.selectedAnnotations objectAtIndex:0];
Обратите внимание, что вы также можете использовать calloutAccessoryControlTapped
метод делегата вида карты * 1007.* вместо addTarget
и написания пользовательского метода .Например:
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view
calloutAccessoryControlTapped:(UIControl *)control
{
DetailMap *hospitalInfo = (DetailMap *)view.annotation;
//do something with the annotation...
}
У вас есть два класса:
Hospital
, который содержит полную информацию о больнице, включая номер телефона и т. Д. DetailMap
, который реализует MKAnnotation
и содержит только координату, имя и адрес больницы (, но не номер телефона или что-либо еще )
При нажатии на выноскуКнопка аннотации, вы хотите получить доступ к полной информации больницы (не только координаты, имя и адрес).
Сначала, когда вы говорите в комментариях "DetailMap, который толькосодержит 2 записи ", вы на самом деле имеете в виду« поля »или« свойства »вместо« записи »(каждый объект больницы является« записью »).
Вот несколько способов решить эту проблему:
В DetailMap
добавьте свойство с именем say hospital
типа Hospital
и задайте его при создании DetailMap
объектов в методе callingMap
(hospitalInfo.hospital = hospital
).Затем в методе displayArrow:
вы можете добавить это свойство в массив (mhdvc.hospitalArray = [NSArray arrayWithObject:hospitalInfo.hospital];
).
Измените класс Hospital
, чтобы он сам реализовывал MKAnnotation
, и исключитекласс DetailMap
полностью.Затем вы можете напрямую передать Hospital
объекты в addAnnotation
и в методе displayArrow:
вы сделаете это:
Hospital *hospital = (Hospital *)[mapView.selectedAnnotations objectAtIndex:0];
mhdvc.hospitalArray = [NSArray arrayWithObject:hospital];
Первый вариант проще, так как вы ужесоздал класс DetailMap
, но второй класс чище.
Тем не менее, MoreHospitalDetailViewController
не нужен массив для передачи одного объекта больницы (который содержит несколько полей).Вы можете просто объявить свойство Hospital *hospital
в MoreHospitalDetailViewController
для передачи одного объекта.