UIButton inside UIImageView does not respond to taps
Solution 1
UIImageView
has userInteractionEnabled
set to NO
/ false
by default.
You are adding the button as a subview to the image view. You should set it to YES
/ true
.
Solution 2
May I ask why are you adding invisible UIButtons
to UIImageView
?
Seems like a bad practice, notice Interface Builder
doesn't allow you to add UIButton
inside them.
If you want an image with touch handling, you can:
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents];
[button setTitle:@"point" forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"img.jpg"] forState:UIControlStateNormal];
[button setFrame:CGRectMake(0.0, 0.0, 40.0, 40.0)];
[scrollView addSubview:button];
Solution 3
You can have addInvisibleButtons implementation as
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundColor:[UIColor clearColor]];
[button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents];
[button setTitle:@"point" forState:UIControlStateNormal];
button.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
self.imageView.userInteractionEnabled = YES;
[self.imageView addSubview:button];
If you want to have UIButton
as completely invisible then you need to remove a line
[button setTitle:@"point" forState:UIControlStateNormal];
since it use to show text on UIButton
which make it visible.
This may resolve your issue.
Ravi
Updated on June 18, 2022Comments
-
Ravi almost 2 years
I have a scroll view, which has an image view with an image as a subview, and the image view has a
UIButton
as one of its subviews. The problem is, I am not able to click on the button. I can SEE the button, but I cannot tap on it.Can someone tell me what is it that I am messing up? Any help is greatly appreciated! Thanks!
Below is the code:
scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.jpg"]]; scrollView.delegate = self; self.view = scrollView; // add invisible buttons [self addInvisibleButtons]; [scrollView addSubview:imageView];
addInvisibleButtons
has the following code:UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventAllEvents]; [button setTitle:@"point" forState:UIControlStateNormal]; button.frame = CGRectMake(0.0, 0.0, 40.0, 40.0); [self.imageView addSubview:button];