我正在开发一款应用程序,在该应用程序中,用户通过GPS定位,然后被问及是否位于特定位置。为了确认这一点,立即向他呈现一个气泡提示框,并询问他是否在特定位置。
由于有很多类似的问题,我能够做出自定义的气泡提示框:
我的问题是:按钮无法“点击”
我的猜测是:由于这个自定义的气泡提示框比标准气泡提示框更高,我不得不将它放在一个负的“frame”中,因此按钮无法被点击。以下是我的didSelectAnnotationView
方法
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
if(![view.annotation isKindOfClass:[MKUserLocation class]]) {
CalloutView *calloutView = (CalloutView *)[[[NSBundle mainBundle] loadNibNamed:@"callOutView" owner:self options:nil] objectAtIndex:0];
CGRect calloutViewFrame = calloutView.frame;
calloutViewFrame.origin = CGPointMake(-calloutViewFrame.size.width/2 + 15, -calloutViewFrame.size.height);
calloutView.frame = calloutViewFrame;
[calloutView.calloutLabel setText:[(MyLocation*)[view annotation] title]];
[calloutView.btnYes addTarget:self
action:@selector(checkin)
forControlEvents:UIControlEventTouchUpInside];
calloutView.userInteractionEnabled = YES;
view.userInteractionEnabled = YES;
[view addSubview:calloutView];
}
}
CalloutView是一个简单的类,有两个属性(标签用于显示地点名称和按钮),使用xib创建。
我花了几天时间定制这个自定义的气泡。我尝试使用"asynchrony solutions" 解决方案,但我无法添加除披露按钮之外的任何其他类型的按钮。
我的下一步尝试是找到比asynchrony solutions更容易的东西,并将其修改为我的用途。这就是我发现tochi's自定义气泡的方式。
基于他的工作,我能够定制他的气泡并将信息按钮更改为我的自定义按钮。然而,我的问题仍然存在。为了将我的自定义气泡视图放在图钉的上方,我必须给它负框架,因此我的按钮只能在底部5个像素处“可点击”。似乎我需要深入挖掘iOS默认气泡,对其进行子类化并更改气泡的框架。但我现在真的感到绝望。
如果你们能指引我正确的方向,或者给我一些建议,我会很高兴。
canShowCallout
设置为NO
,则对didSelectAnnotationView
的调用将不受title
/subtitle
的存在或缺失的影响。 - RobdeselectAnnotationView
更改为检查何时取消选择弹出窗口注释。 - Rob