没有获取按钮操作/单击自定义MKannotation调出视图

时间:2014-02-24 11:31:12

标签: ios objective-c mkmapview mkannotation mkannotationview

我为地图视图创建了自定义注释和调用。当用户点击呼出视图时,我需要导航到另一个视图,或者他点击添加为子视图的按钮到标注视图。但在这种情况下,手势识别器和添加目标对我来说都不起作用。调用setSelected:方法,并在调出视图中点击时隐藏视图。

 @interface VBPunchCardAnnotation : MKAnnotationView{

    UIView *calloutView;
  }

- (id)initWithAnnotation:(id )annotation reuseIdentifier:(NSString *)reuseIdentifier deal:(id)punchdeal
{
  self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
  calloutView = [[UIView alloc] init];
  calloutView.hidden = YES;

  infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];

  [calloutView addSubview:infoButton];

  UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(annotationTapped:)];
  singleTap.numberOfTapsRequired = 1;
  singleTap.delegate = self;
  [calloutView addGestureRecognizer:singleTap];

  [infoButton addTarget:self action:@selector(annotationTapped:) forControlEvents:UIControlEventTouchUpInside];
   [self addSubview:calloutView];

   return self;

}

-(void)setSelected:(BOOL)selected animated:(BOOL)animated
{
 // show/hide callout and swap pin image
  calloutView.hidden = !selected;
  self.image = !selected ? normalPin : selectedPin;
  // dispatch an event to alert app a pin has been selected

  if(selected) [[NSNotificationCenter defaultCenter] postNotificationName:@"punchCardAnnotation" object:self];
}

-(void)annotationTapped:(id)sender{
   [self.delegate punchCardAnnotationClickedForDeal:self.punchDeal];
}

2 个答案:

答案 0 :(得分:1)

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
    UIView* hitView = [super hitTest:point withEvent:event];
    if ([hitView isKindOfClass:[UIButton class]]) {

    }
}

答案 1 :(得分:0)

最后我得到了答案。它在这里

Followed this tutorial。真的很棒的解决方案。

https://github.com/nfarina/calloutview

快乐的编码!!