我创建了一个自定义注释 View 。在 setSelected 方法中,我根据需要实现了一个 View ,现在我想向该 View 添加一个按钮。但是按钮没有检测到点击事件,
它被 map View 吸收。我应该怎么做才能添加像 rightcalloutaccessory 这样的按钮。
提前致谢。
Best Answer-推荐答案 strong>
我通过将 UIButton 的控制事件更改为 解决了这个问题
[button addTarget:self actionselector(clickEvent) forControlEvents:UIControlEventTouchDown]
下面是我创建自定义注释的部分代码。
- (CustomAnnotationView *)mapViewMKMapView *)aMapView viewForAnnotationid <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[CustomAnnotation class]])
{
CustomAnnotationView *newAnnotationView = nil;
// determine the type of annotation, and produce the correct type of annotation view for it.
newAnnotationView = [[[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil delegate: targetController] autorelease];
[newAnnotationView setEnabled:YES];
[newAnnotationView setCanShowCallout:NO];
return newAnnotationView;
}
}
@interface CustomAnnotationView : MKAnnotationView
{
}
@end
@implementation CustomAnnotationView
- (id)initWithAnnotationid <MKAnnotation>)annotation reuseIdentifierNSString *)reuseIdentifier delegateid)targetController
{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
/* Set initial width as you want. ex: 50X50*/
self.frame = CGRectMake(0, 0, Initial_width, Initial_height);
self.backgroundColor = [UIColor redColor];
return self;
}
/* When you tap on an annotation this method is fired*/
- (void)setSelectedBOOL)selected animatedBOOL)animated
{
if(selected){
/* When you select annotation, instead of showing default callout you can increase the width &height of annotation and add your custom view here*/
self.frame = CGRectMake(0, 0, max_width, max_height);
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(6, 0, max_width-10, max_height)];
view.backgroundColor = [UIColor blackColor];
UIButton *but = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *img = [UIImage imageNamed"image.png"];
but = CGRectMake(x , y, img.size.width + 20, img.size.height + 15);
[but setImage:img forState:UIControlStateNormal];
[but addTarget:targetController actionselector(methodName) forControlEvents:UIControlEventTouchDown];
[view addSubview:but];
[self addSubview:view];
}
else {
/* When you tap outside of annotation, set the initial frame for the annotation. and remove the custom view from annotation*/
self.frame = CGRectMake(0, 0, Initial_width, Initial_height);
[view removeFromSuperview];
}
}
关于iphone - 如何将 uibutton 添加到自定义注释 View ,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/7877921/
|