Настройка действия для пользовательского подкласса UIButton - PullRequest
3 голосов
/ 05 мая 2011

Я пару дней пытался найти способ вызвать действие: селектор на пользовательской кнопке, производной от 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;  
}

Заранее спасибо.Я надеюсь, что дал четкое объяснение своей проблемы.

1 Ответ

0 голосов
/ 05 мая 2011

Я думаю, вы на неправильном пути.Чтобы отправить действие @selector, ваш класс должен наследоваться от UIControl, а не от UIButton.Проверьте UIControl Class Reference Я думаю, что проблема здесь.Не стесняйтесь сказать мне, если я не понял ваш вопрос.

...