iphone - 如何将 uibutton 添加到自定义注释 View

标签 iphone ios mkmapview mkannotationview

我创建了一个自定义注释 View 。在 setSelected 方法中,我已经根据需要实现了一个 View ,现在我想向该 View 添加一个按钮。但是按钮没有检测到点击事件, 它被 map View 吸收了。我应该做什么来添加像 rightcalloutaccessory 这样的按钮。 提前致谢。

最佳答案

我通过将 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];

            }
    }

关于iphone - 如何将 uibutton 添加到自定义注释 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877921/

相关文章:

objective-c - 在 Cocoa macOS 应用程序中,如何获取 MKMapView 左下角的度数坐标?

iphone - MKCircleview 图纸

iphone - 如何在 iOS 应用程序中调用 python 脚本?

ios - 如何在启用 #if canImport() 的情况下添加可选委托(delegate)?

ios - MKMapView MKCircle 渲染一个半径太大的圆

ios - 将 MKMap 分解为图 block ——图 block 太小

iphone - 两个日期之间缺少月份名称

iphone - iOS:AFNetworking:如果 token 过期则重复 block

iphone - 将值从 C++ 返回到 Obj-C?

ios - Collection View beginInteractiveMovementForItem 返回 false