[英]Click on UIButton Does Not Work if it's Added as Subview to 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);
编辑:此行[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而不是red.x和red .y,但是宽度和高度正确
只需执行self.red.userInteractionEnabled = YES。
UIImageView的userInteractionEnabled默认为NO。
自定义按钮没有UI。 因此您无法选择它。 (您可以使用绑定按钮尝试,或向按钮添加一些图像并将按钮的alpha设置为0.1或其他)
@tkanzakic答案应该是正确的。 只需将TapGestureRecognizer添加到ImageView或将图像添加到Button。
除了使用单独的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];
很简单,按钮没有响应,因为它的框架不正确,所以它不在您认为的位置。 基本上在下面更改您的行:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.