UITapGestureRecognizer not working in UIImageView
Solution 1
You should enable user interaction for UIImageView
object:
[self.storyImageView_ setUserInteractionEnabled:YES];
EDIT:
Try to remove the
[showStoryTapRecognizer setDelegate:self];
I don't think UITapGestureRecognizer
has its delegate methods as far as I know.
Solution 2
UIImageView
has user interaction disabled by default, unlike most other UIView
subclasses in UIKit.
Solution 3
I also noticed that in swift3, if you are adding a gesture recognizer which also looks for the target and the target is usually self
, then you have to make the UIView to which you are adding the gesture recognizer to be a lazy var
. Otherwise the gesture recognizer won't work. I think this is a bug in swift3. Ideally if you are accessing self in a variable before the class is fully initialized, it should throw an error. The code below won't detect gesture recognizer.
let messageImageView: CachedImageView = {
let iv = CachedImageView()
iv.translatesAutoresizingMaskIntoConstraints = false
iv.layer.cornerRadius = 16
iv.layer.masksToBounds = true
iv.contentMode = .scaleAspectFill
iv.isUserInteractionEnabled = true
let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap))
zoomTap.numberOfTapsRequired = 1
iv.addGestureRecognizer(zoomTap)
return iv
}()
To fix that, you have to use lazy var
lazy var messageImageView: CachedImageView = {
let iv = CachedImageView()
iv.translatesAutoresizingMaskIntoConstraints = false
iv.layer.cornerRadius = 16
iv.layer.masksToBounds = true
iv.contentMode = .scaleAspectFill
iv.isUserInteractionEnabled = true
let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap))
zoomTap.numberOfTapsRequired = 1
iv.addGestureRecognizer(zoomTap)
return iv
}()
Solution 4
Maybe ... action:@selector(showNewsStory)
instead of action:@selector(showNewsStory:)
.
Please check it .
Are there any other UITapGestureRecognizer
in this controller ?
Try this:
otherTapRecognizer.cancelsTouchesInView = NO;
Solution 5
objective-c ios 10
UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(OneTouchHandeler)];
[oneTouch setNumberOfTouchesRequired:1];
[imageView addGestureRecognizer:oneTouch];
imageView.userInteractionEnabled = YES;
// swift 3.0
let oneTouch = UITapGestureRecognizer(target: self, action: #selector(self.OneTouchHandeler(_:)))
imageView.addGestureRecognizer(oneTouch)
imageView.isUserInteractionEnabled = true
xonegirlz
Updated on April 27, 2021Comments
-
xonegirlz about 3 years
I had the following code:
UITapGestureRecognizer *showStoryTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showNewsStory:)]; [showStoryTapRecognizer setDelegate:self]; [self.storyImageView_ addGestureRecognizer:showStoryTapRecognizer]; [showStoryTapRecognizer release];
This however doesn't trigger the showNewsStory, why is this? I have enabled userInteraction in the image view.