Click Event on UIImageView programmatically in ios
IphoneIosUiimageviewUitouchUitapgesturerecognizerIphone Problem Overview
I am displaying a image from code here is the code
UIImageView *preArrowImage =[[UIImageView alloc]init ];
preArrowImage.image =[UIImage imageNamed:@"arrowprev.png"];
preArrowImage.frame = CGRectMake(20, 60, 10, 30);
[self.view addSubview:preArrowImage];
I want to handle the touch event on the preArrowImage programmatically.
Iphone Solutions
Solution 1 - Iphone
SWIFT 5
let preArrowImage : UIImageView // also give it frame
let singleTap = UITapGestureRecognizer(target: self, action: #selector(tapDetected))
preArrowImage.isUserInteractionEnabled = true
preArrowImage.addGestureRecognizer(singleTap)
//Action
func tapDetected() {
print("Imageview Clicked")
}
Objective-c
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected)];
singleTap.numberOfTapsRequired = 1;
[preArrowImage setUserInteractionEnabled:YES];
[preArrowImage addGestureRecognizer:singleTap];
-(void)tapDetected{
NSLog(@"single Tap on imageview");
}
Solution 2 - Iphone
Simply add a UITapGesture
on the image but remember to make its UserInteraction Enabled.
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(singleTapGestureCaptured:)];
[preArrowImage addGestureRecognizer:singleTap];
[preArrowImage setMultipleTouchEnabled:YES];
[preArrowImage setUserInteractionEnabled:YES];
Solution 3 - Iphone
Now in Swift!
let singleTap = UITapGestureRecognizer(target: self, action: Selector("tapDetected"))
singleTap.numberOfTapsRequired = 1
preArrowImage.userInteractionEnabled = true
preArrowImage.addGestureRecognizer(singleTap)
//Action
func tapDetected() {
println("Single Tap on imageview")
}
Solution 4 - Iphone
Swift 3
On UIImageView enable UserInterAction
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
if let touch = touches.first {
if touch.view == self.imgVwPostPreview { //image View property
//Do your actions
//self.delegate?.didClickOnCellImageView(indexPath: self.cellIndexPath!)
}
}
}
Solution 5 - Iphone
Using story board with view in view controller.
After selecting one of the gesture recognizer drag it to your controller.
Now it will display in "Document outline" and header of view controller xib.
Drag gesture to UILable
create IBAction method in header file
Now drag it from handler to gesture icon in xib
Solution 6 - Iphone
Xamarin.iOS
UIImageView preArrowImage; // also give it frame
var singleTap = new UITapGestureRecognizer(TapDetected);
singleTap.ShouldReceiveTouch -= TapGesture_ShouldReceiveTouch;
singleTap.ShouldReceiveTouch += TapGesture_ShouldReceiveTouch;
preArrowImage.UserInteractionEnabled = true;
preArrowImage.AddGestureRecognizer(singleTap)
bool TapGesture_ShouldReceiveTouch(UIGestureRecognizer recognizer, UITouch touch)
{
return true;
}
void TapDetected(UITapGestureRecognizer tapGestureRecognizer)
{
print("Imageview Clicked")
}
Solution 7 - Iphone
If your UIImageView is an IBOutlet which you get from a Storyboard or Nib, you could add a UIGestureRecognizer to the image view, enable user interaction and connect a IBAction to the gesture recognizer.
For more info check my answer on this question: https://stackoverflow.com/questions/29202882/how-to-you-make-a-uiimageview-on-the-storyboard-clickable-swift/44053515#44053515
Solution 8 - Iphone
Here's another option: Cheat.
I mean, think laterally.
Set up your UIImage how you want, cropped, aspect fit, whatever.
Overlay this with a UIView (equal dimensions, position etc.)
Set the background to clearcolour, and the class to UIControl.
Point the touch up inside event to your handler, and voila.