设置自定义UIButton子类的操作

时间:2011-05-05 14:29:59

标签: iphone objective-c cocoa-touch uibutton subclass

我已经尝试了几天来找到一种方法来调用动作:自定义按钮上的选择器,派生自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 :(得分:0)

我认为你走错了路。要发送动作@selector,您的类需要从UIControl而不是UIButton继承。查看UIControl Class Reference我认为问题出在这里。 如果我不明白你的问题,请不要犹豫告诉我。