如何将uibutton添加到自定义注释视图

时间:2011-10-24 15:19:41

标签: iphone ios mkmapview mkannotationview

我创建了一个自定义注释视图。在setSelected方法中,我已经实现了我需要的视图,现在我想为该视图添加一个按钮。但是没有检测到点击事件的按钮, 它被mapview吸收了。我该怎么做才能添加像rightcalloutaccessory这样的按钮。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

我通过将UIButton的控件事件更改为

来解决了这个问题
[button addTarget:self action:@selector(clickEvent) forControlEvents:UIControlEventTouchDown]

以下是我创建自定义注释的代码部分。

    - (CustomAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id <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)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier delegate:(id)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)setSelected:(BOOL)selected animated:(BOOL)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 action:@selector(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];

            }
    }