点击 UIButton 不起作用,如果它被添加为 UIImageView 的子视图



我有一个简单的动画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]; 

我在这里做错了什么?

代替这一行,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); 

EDIT:这一行[self.red bringSubviewToFront:redButton];是不需要的。

代替插入UIButton作为子视图,使用UITapGestureRecognizer,例如:

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

你要做的是反转你的实现,添加UIButton到UIImageView不是一个好主意,而是创建一个自定义风格的UIButton编程,并添加UIImageView作为它的子视图,肯定会工作

编辑:至于你当前的实现,你在UIImageView中添加了UIButton,所以可能你想要图像的每个部分都接受click事件,在那种情况下,你的UIButton的x和y坐标将是0,0而不是红色。X和红色。Y,但是宽度和高度是正确的

直接做self.red.userInteractionEnabled = YES.

UIImageView有userInteractionEnabled NO作为默认值

自定义按钮没有UI。所以你不能选择它。(你可以尝试绑定按钮,或添加一些图像按钮和设置按钮alpha为0.1或其他)

@tkanzakic答案应该是正确的。只需将TapGestureRecognizer添加到ImageView或将Image添加到Button。

不使用单独的imageview和Button, 使用Button中的imageview属性。这将解决你所有的问题,并使你从编写额外的代码行中解脱出来。

UIButton *redButton = [UIButton buttonWithType: UIButtonTypeCustom];

redButton.imageView。形象=[界面图像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];

这很简单,按钮没有响应,因为它的框架是错误的,所以它不是你认为它在哪里。基本上改变下面的行:

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

最新更新