0

我有一个简单UIImageView的动画,我需要检测它的点击。我添加了一个UIButton这是 this 的子视图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]; 

我在这里做错了什么?

4

7 回答 7

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];不需要这条线..

于 2013-04-24T09:36:47.947 回答
3

而不是插入 aUIButton作为子视图使用 a UITapGestureRecognizer,例如:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(correctButtonClick)];
[self.red addGestureRecognizer:tap];
于 2013-04-24T09:39:13.187 回答
2

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

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

于 2013-04-24T09:56:40.800 回答
1

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

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

于 2013-08-20T08:14:54.767 回答
1

只需执行 self.red.userInteractionEnabled = YES。

UIImageView 默认有 userInteractionEnabled NO。

于 2013-04-24T09:33:00.407 回答
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);
于 2013-04-24T10:55:10.840 回答
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];
于 2013-04-24T09:58:13.337 回答