Cliquez sur Événement sur UIImageView par programme dans iOS

95

J'affiche une image du code voici le code

UIImageView *preArrowImage =[[UIImageView alloc]init ];
preArrowImage.image =[UIImage imageNamed:@"arrowprev.png"];
preArrowImage.frame = CGRectMake(20, 60, 10, 30);
[self.view addSubview:preArrowImage];

Je souhaite gérer l'événement tactile sur la preArrowImage par programmation.

Sumit Patel
la source
Cela peut être d'une certaine utilité stackoverflow.com/questions/9008975/…
Gaz_Edge
Cochez cette réponse vous aidera http://stackoverflow.com/a/41328885/3177007
Mohamed Jaleel Nazir

Réponses:

250

Objectif 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");
  }

SWIFT 4.2 / 5

let preArrowImage : UIImageView // also give it frame
let singleTap = UITapGestureRecognizer(target: self, action: #selector(tapDetected))
preArrowImage.isUserInteractionEnabled = true
preArrowImage.addGestureRecognizer(singleTap)

//Action
@objc func tapDetected() {
    print("Imageview Clicked")
}
Vivek Sehrawat
la source
pour Swift 2, vous devez remplacer Selector("tapDetected")par:"tapDetected:"
datayeah
Par défaut singleTap.numberOfTapsRequired = 1, Happy Coding Thanks
Ravi
'let singleTap = UITapGestureRecognizer (target: self, action: #selector (NavigationViewController.tapDetectedImage))'
Alex22
18

Ajoutez simplement un UITapGesturesur l'image mais n'oubliez pas de rendre son UserInteraction activée .

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self 
    action:@selector(singleTapGestureCaptured:)];
    [preArrowImage addGestureRecognizer:singleTap];
    [preArrowImage setMultipleTouchEnabled:YES];
    [preArrowImage setUserInteractionEnabled:YES];
IronManGill
la source
6

Maintenant dans 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")
}
Sakiboy
la source
4

Swift 3

Sur UIImageView, activez 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!)
            }
        }
    }
Mohamed Jaleel Nazir
la source
3

Utilisation du storyboard avec vue dans le contrôleur de vue.
la vue peut être ImageView, UIView, UILabel, TextField ou un autre contrôleur


Après avoir sélectionné l'un des outils de reconnaissance de gestes, faites-le glisser sur votre manette.
Maintenant, il s'affichera dans "Aperçu du document" et en-tête du contrôleur de vue xib.

Icône de geste dans la ligne de sortie du document et xib
Faites glisser le geste vers UILable
Faites glisser le geste vers UILable


Créer manuellement la méthode (IBAction) dans le fichier d'en-tête


créer la méthode IBAction dans le fichier d'en-tête
Maintenant, faites-la glisser du gestionnaire vers l'icône de geste dans xib
Liez-le avec l'icône de geste

Subhash
la source
0

Si votre UIImageView est un IBOutlet que vous obtenez à partir d'un Storyboard ou d'une Nib, vous pouvez ajouter un UIGestureRecognizer à la vue d'image, activer l'interaction de l'utilisateur et connecter une IBAction au module de reconnaissance de mouvement.

Pour plus d'informations, consultez ma réponse à cette question: Comment rendre une UIImageView sur le storyboard cliquable (swift)

xxtesaxx
la source
0

Voici une autre option: tricher.

Je veux dire, pense latéralement.

Configurez votre UIImage comme vous le souhaitez, rognée, ajustée, peu importe.

Superposez-le avec un UIView (dimensions égales, position, etc.)

Définissez l'arrière-plan sur clearcolour et la classe sur UIControl.

Pointez l'événement retouche à l'intérieur de votre gestionnaire, et le tour est joué.

Raki
la source
Encore plus simple qu'un UIView: utilisez un bouton et supprimez le texte. ;)
Néph
0

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")
}
Olivier MATROT
la source