如果将UIButton作为子视图添加到UIImageView,则单击UIButton不起作用

时间:2013-04-24 09:31:26

标签: ios objective-c uiimageview uibutton addsubview

我有一个简单的UIImageView动画,我需要检测一下它。我添加了一个UIButton,它是此UIImageView的子视图。但是,点击它不起作用。我已经在添加到视图时测试了UIButton本身,并且它可以工作,因此它不是导致问题的按钮。

以下是代码:

self.red = [[UIImageView alloc] initWithFrame:CGRectMake(50, 300, 85, 100)];
self.red.image = [UIImage imageNamed:@"red.png"];

[self.red setUserInteractionEnabled: YES];
[self.view addSubview: self.red];
[self.view bringSubviewToFront:self.red]; 

UIButton *redButton = [UIButton buttonWithType: UIButtonTypeCustom];
redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height);
[redButton addTarget: self action:@selector(correctButtonClick) forControlEvents: UIControlEventAllTouchEvents];
[redButton setUserInteractionEnabled:YES];

[self.red addSubview: redButton];
[self.red bringSubviewToFront:redButton]; 

我在这里做错了什么?

7 个答案:

答案 0 :(得分:3)

而不是这一行,redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height);试试这个

redButton.frame = CGRectMake(0,0, self.red.frame.size.width, self.red.frame.size.height); 

编辑:此行[self.red bringSubviewToFront:redButton];不需要..

答案 1 :(得分:3)

不使用UIButton作为子视图,而是使用UITapGestureRecognizer,例如:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(correctButtonClick)];
[self.red addGestureRecognizer:tap];

答案 2 :(得分:2)

你需要做的是反转你的实现,将UIButton添加到UIImageView不是一个好主意,而是以编程方式创建自定义样式的UIButton,并添加UIImageView作为其子视图,肯定会工作

编辑: 至于你当前的实现,你已经在UIImageView中添加了UIButton,所以你可能希望图像的每个部分都接受click事件,在这种情况下你的UIButton的x和y坐标将是0,0而不是red.x和red.y ,但宽度和高度是正确的

答案 3 :(得分:1)

只需做self.red.userInteractionEnabled = YES。

UIImageView默认使用userInteractionEnabled NO。

答案 4 :(得分:1)

自定义按钮没有用户界面。所以你不能选择它。 (您可以使用绑定按钮尝试它,或者将一些图像添加到按钮并将按钮alpha设置为0.1或其他)

@tkanzakic答案应该是正确的。 只需将TapGestureRecognizer添加到ImageView或将图像添加到按钮。

答案 5 :(得分:0)

不使用单独的imageview和Button,使用Button 中的imageview属性。这将解决您的所有问题,并使您免于编写额外的代码行。

UIButton *redButton = [UIButton buttonWithType: UIButtonTypeCustom];
  

redButton.imageView.image = [UIImage imageNamed:@“red.png”];

redButton.frame = CGRectMake(50, 300, 85, 100);
[redButton addTarget: self action:@selector(correctButtonClick) forControlEvents: UIControlEventAllTouchEvents];
[redButton setUserInteractionEnabled:YES];

[self.red addSubview: redButton];

答案 6 :(得分:0)

很简单,按钮没有响应,因为它的框架是错误的,所以它不在你想象的地方。基本上改变你的行:

redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height);

用这个:

redButton.frame = CGRectMake(self.red.bounds.origin.x, self.red.bounds.origin.y, self.red.frame.size.width, self.red.frame.size.height);