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

时间:2011-09-13 15:38:38

标签: iphone uibutton selector

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

我在点击地图上的图钉时显示自定义标注气泡,在气泡内显示一些图像,我想要详细说明按钮,以便用户点击并访问更多信息。我的问题是显示了气泡和按钮,但按钮上的单击不会调用选择器方法。

//编辑:抱歉,因为我第一次输入太多代码,我会编辑尝试更具体,谢谢你的答案

在方法中:

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

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

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];

我将其添加为子视图,同时自定义气泡标注我创建了一些标签和图像,我添加到视图calloutView,它首先被隐藏,直到引脚的select方法被称为

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

之后我创建了圆形的rect背景和大小到文本,我省略了那部分代码因为我认为它现在不重要,让我知道如果我应该把它,我使用一些图形函数来模拟默认iphone bubble map sytle

我将之前创建的所有元素添加到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;  

//注意:这里是问题,如果我遗漏这个框架线,一切都很完美,或者如果我将origin.x和origin.y设置为0,0但是当我更改该数字以显示它在视图的正确位置按钮选择器停止工作

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

然后我在单击时将选择器事件添加到被调用,并且正如我所说的函数calloutAccessoryTap仅在未指示附件的框架或者origin.x和y都设置为0时才调用它

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

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

[self addSubview:accessory];

因此,首先视图只是一个图标,标签和图像的标注视图被隐藏,细节按钮也会发生同样的情况,当选择图钉并且需要显示气泡时,标注视图和按钮显示。屏幕上可以看到所有内容,但是当附件的框架设置为良好位置时 - 与原点x和y 0,0不同,选择器停止工作。

希望你能帮助我,因为我尝试了很多不同的东西,但没有一个能起作用。

1 个答案:

答案 0 :(得分:1)

完成代码需要花费时间,所以我只会给你一个指针。您是否在UIButton "accessory"之上添加了子视图?如果是,那么按钮当然不会检测到水龙头。子视图相互叠加,因此在按钮顶部放置透明视图将有效地使其无效。