我有一个从xib文件加载的自定义callout。 它正确加载和显示。 问题是标注不会从视图中删除。 我最近添加了'tag = 999',所以我可以尝试跟踪子视图,没有快乐,它永远不会看到值为999的标记。
我已经尝试了所有可能的“removeFromSuperview”组合。 'handleTap方法被称为ok。
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView
*)view {
if ([view.annotation isKindOfClass:[MKUserLocation class]]) {
return;
}
UIView *customCalloutView = [[[NSBundle mainBundle] loadNibNamed:@"CustomXibCallout" owner:self options:nil]objectAtIndex:0];
customCalloutView.tag = 999;
customCalloutView.backgroundColor = [UIColor whiteColor];
customCalloutView.alpha = 0.9;
customCalloutView.layer.cornerRadius = 10.0f;
CGPoint offset = CGPointAdd(customCalloutView.center,(CGPointMake(-100, -150)));
customCalloutView.center = offset;
[view addSubview: customCalloutView];
}
- (void)handleTap:(UITapGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
for (UIView *subView in self.view.subviews) {
if (subView.tag == 999) {
[subView removeFromSuperview];
}
}
}
}
答案 0 :(得分:0)
- (void)handleTap:(UITapGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateEnded)
{
MKAnnotationView *av = (MKAnnotationView *)sender.view;
if (av.tag == 999) {
[av removeFromSuperview];
}
}
}
答案 1 :(得分:0)
首先,您要将customCalloutView
添加为MKAnnotationView
- 不 的子视图作为self.view
的子视图。所以循环self.view.subviews
寻找999并不会起作用。
具体取决于层次结构...如果(MKAnnotationView *)view
是(MKMapView *)mapView
的子视图,这是self.view
的子视图...您可以尝试:
UIView *v = [self.view viewWithTag:999];
[v removeFromSuperview];
但....我认为更好的方法是知道视图在层次结构中的位置。在- (void)handleTap:(UITapGestureRecognizer *)sender
中,sender
是手势。你可以通过以下方式获得发送水龙头的视图:
sender.view
因此,如果您知道MKAnnotationView
正在发送手势,您可以继续分配999代码并将处理程序更改为:
- (void)handleTap:(UITapGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
UIView *v = [sender.view viewWithTag:999];
[v removeFromSuperview];
}
}