我已经尝试了几天来找到一种方法来调用动作:自定义按钮上的选择器,派生自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;
}
提前谢谢你。我希望我已经清楚地解释了我的问题。
答案 0 :(得分:0)
我认为你走错了路。要发送动作@selector,您的类需要从UIControl而不是UIButton继承。查看UIControl Class Reference我认为问题出在这里。 如果我不明白你的问题,请不要犹豫告诉我。