当帧原点不是0,0时,UIButton选择器不工作



我已经尝试了很多很多不同的方法,但找不到我的代码有什么问题,希望你能帮助我!

我正在制作一个自定义标注气泡,当点击地图上的大头针时显示,在气泡内显示一些图像,我想要详细披露按钮,这样用户就可以点击并访问更多信息。我的问题是,气泡和按钮显示,但按钮上的单击不调用选择器方法。

//编辑:对不起,因为我第一次放了太多的代码,我会编辑尽量更具体,谢谢你的回答

方法:

- (id) initWithAnnotation:(id)annotation reuseIdentifier:(NSString *)reuseIdentifier

首先我展示了一个imageview来改变一个自定义图标而不是普通的pin

self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier];
self.frame = CGRectMake(0, 0, kWidth, kHeight);
self.backgroundColor = [UIColor clearColor];
imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon.png"]];
imageView.frame = CGRectMake(kBorder, kBorder, kWidth - 2 * kBorder, kWidth - 2 * kBorder);
[self addSubview:imageView];

我将其作为子视图添加,同时为了自定义气泡callout我创建了一些标签和图像并将calloutView添加到视图中它一开始是隐藏的直到大头针的select方法被称为

   calloutView = [[UIView alloc] initWithFrame:CGRectMake(10, 30, restNameLbl.frame.size.width + 30, 60)];
   calloutView.hidden = YES;

之后,我创建了圆角矩形背景和文本大小,我省略了这部分代码因为我认为它现在不重要,告诉我是否需要添加,我使用了一些图形函数来模拟默认的iphone气泡地图样式

我将之前创建的所有元素添加到calloutView:

[calloutView addSubview:backgroundRect];         
[calloutView addSubview:restNameLbl];        
[calloutView addSubview:likeImg];
[calloutView addSubview:likesLbl]; 
[calloutView addSubview:noLikeImg];
[calloutView addSubview:noLikesLbl];

然后我将视图放置在正确的位置

//position callout above pin
calloutView.frame = CGRectMake(-25, -calloutView.frame.size.height-10, calloutView.frame.size.width + 50, calloutView.frame.size.height);       
[self addSubview:calloutView];

在同一个冒泡视图中——叫做calloutView,我想显示一个细节披露按钮,这样用户就可以访问更多的信息,但是如果我把它直接添加到calloutView中,选择器事件永远不会触发。所以我尝试用另一种方式来实现它它向父视图添加一个按钮,将其隐藏状态设为yes并在选择器方法

上显示它
accessory = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[accessory setTitle:myAnnotation.idRest forState:UIControlStateNormal];
accessory.hidden= YES;  

//注意:这里是问题,如果我离开这个框架线,一切工作完美,或者如果我设置原点。X和原点。y为0,0,但是当我改变这个数字以显示它在视图的正确位置时,按钮选择器停止工作

accessory.frame = CGRectMake(110, calloutView.frame.origin.y+25, accessory.frame.size.width, accessory.frame.size.height);

然后我将选择器事件添加到点击时调用,正如我所说的函数calloutAccessoryTap,它只在配件的框架未指示或原点时调用。X和y都被设置为0

accessory.userInteractionEnabled = YES;
[accessory addTarget:self action:@selector(calloutAccessoryTap) forControlEvents: UIControlEventTouchUpInside | UIControlEventTouchCancel];

最后我将按钮添加到主视图

[self addSubview:accessory];

所以一开始视图只是一个图标,带标签和图像的callout视图是隐藏的,细节按钮也是如此,当大头针被选中时,气泡需要显示callout视图和按钮。一切都在屏幕上显示,但是当附件的框架被设置为良好的位置-与原点x和y 0,0不同时,选择器停止工作。

希望你能帮助我,因为我尝试了很多不同的方法,但都没有效果。

遍历代码很费时间,所以我给你一个指针。你是否在UIButton "accessory"的顶部添加子视图?如果是,那么这个按钮当然不会检测到轻敲。子视图是相互叠加的,所以在按钮顶部放置透明视图将有效地使其无效。

最新更新