У меня есть пользовательский UIView
, который отображается как выноска, когда пользователь нажимает пользовательскую аннотацию на MKMapView
.
Чтобы достичь этого, я подклассифицировал MKAnnotationView
и перегрузил метод -setSelected:selected animated:
, как предложено в этого ответа .По сути, я добавляю свой пользовательский вид как подпредставление моего подкласса MKAnnotationView
.
Проблема в том, что я вообще не могу взаимодействовать с выноской, которая содержит кнопку и прокручиваемое веб-представление.Более того, если выноска скрывает аннотацию, и я нажимаю выноску в приблизительном месте этой скрытой аннотации, выноска будет отклонена, и будет показана новая.
// TPMapAnnotationView.m
@implementation TPMapAnnotationView
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
if(selected)
{
TPMapAnnotation* anno = ((TPMapAnnotation*)self.annotation);
QuickInfoView* qi = [[QuickTabView alloc] initWithFrame:CGRectMake(0, 0, 440, 300)];
[qi displayDataForAnnotation:anno];
[self addSubview:qi];
// some animiation code that doesn't change things either way
}
else
{
[[self.subviews objectAtIndex:0] removeFromSuperview];
}
}
Приведенный ниже код создаетTPMapAnnotationView
.
// this is in the view controller that contains the MKMapView
- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id) annotation
{
if ([annotation isKindOfClass:[TPMapAnnotation class]])
{
TPMapAnnotationView *customAnnotationView = (TPMapAnnotationView *)[myMap dequeueReusableAnnotationViewWithIdentifier:@"TPAnn"];
if (customAnnotationView == nil)
{
customAnnotationView = [[TPMapAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:@"TPAnn"];
}
[customAnnotationView setImage:annotationImage];
return customAnnotationView;
}
return nil; // blue radar circle for MKUserLocation class.
}