Я пару дней пытался найти способ вызвать действие: селектор на пользовательской кнопке, производной от UIButton
, которую я хочу связать с аннотацией к выводу.Причина, по которой я использовал подкласс, заключается в том, что я хочу передать некоторые данные в этот объект кнопки, чтобы показать другое UIView
отображение этих данных при нажатии кнопки.
Проблема заключается в том, что во время выполнениякогда я нажимаю на аннотацию булавки, она открывает свою кнопку, и когда я нажимаю на нее, ничего не происходит.Мой метод showDetails:
не вызывается при получении события touchupInside
, как я установил здесь:
[rightButton addTarget:self
action:@selector(showDetails:)
forControlEvents:UIControlEventTouchUpInside];
Мой вопрос заключается в том, как наследовать методы UIButton
, например addTarget:action:forControlEvents:
, buttonWithType:
и т. д., чтобы использовать их в моем подклассе?
Вот полный код проблемы:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
MKPinAnnotationView *annView=[[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:@"MyPin"] autorelease];
annView.animatesDrop=FALSE;
annView.canShowCallout = YES;
[annView setSelected:YES];
if ([[annotation title] isEqualToString:@"Current Location"]) {
annView.pinColor = MKPinAnnotationColorRed;
}
else {
annView.pinColor = MKPinAnnotationColorPurple;
}
annView.calloutOffset = CGPointMake(-5, 5);
PlaceMark *pm=(PlaceMark *)annotation;
AddressItem *ai=[pm getData];
//Another problem is that i cant set buttonWithType:UIButtonTypeDetailDisclosure cause it generate error cause it is a method of UIbutton superclass
MyDetailButton* rightButton = [MyDetailButton buttonWithType:UIButtonTypeCustom];
[rightButton setData:ai];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
[rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
annView.rightCalloutAccessoryView = rightButton;
return annView;
}
Заранее спасибо.Я надеюсь, что дал четкое объяснение своей проблемы.