89 votes

UIButton Long Press Event

Je veux émuler un appui long sur un bouton, comment puis-je faire cela? Je pense qu'une minuterie est nécessaire. Je vois UILongPressGestureRecognizer mais comment puis-je utiliser ce type?

161voto

Deepak Danduprolu Points 33605

Vous pouvez commencer par la création et la fixation de l' UILongPressGestureRecognizer exemple pour le bouton.

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[self.button addGestureRecognizer:longPress];
[longPress release];

Puis de mettre en œuvre la méthode qui gère le geste

- (void)longPress:(UILongPressGestureRecognizer*)gesture {
    if ( gesture.state == UIGestureRecognizerStateEnded ) {
         NSLog(@"Long Press");
    }
}

Maintenant, ce serait l'approche de base. Vous pouvez également définir la durée minimale de la presse et de la façon dont beaucoup d'erreur tolérable. Et notez également que la méthode est appelée quelques fois si vous après avoir reconnu le geste donc, si vous voulez faire quelque chose à la fin de celui-ci, vous aurez pour vérifier son état et de le gérer.

10voto

TheTiger Points 5776

Essaye ça:

L'ajout d'un bouton dans la vue s'est chargé comme ceci

 -(void)viewDidLoad
{
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn setTag:1]; //you can set any integer value as tag number
    btn.title = @"Press Me";
    [btn setFrame:CGRectMake(50.0, 50.0, 60.0, 60.0)];

// now create a long press gesture

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressTap:)];
    [btn addGestureRecognizer:longPress];
}
 

Appelez maintenant la méthode du geste comme ceci

 -(void)longPressTap:(id)sender
{
    UIGestureRecognizer *recognizer = (UIGestureRecognizer*) sender
//recogniser have all property of button on which you have clicked
//now you can compare button tag with recogniser tag  
//view frame for getting the info on which button the click event has been happened 
//then compare tag like this

 if(recognizer.view.tag == 1)
 { 
    //put your button's click code here
 }
   //and you can also compare the frame of your button with recogniser's view
 CGRect btnRect = CGRectMake(50.0, 50.0, 60.0, 60.0);
 if(recogniser.view.frame == btnRect)
 {
   //put your button's click code here
 }

 //remember frame comparing is alternative method you dont need 
 //to write frame comparing code if you are matching the tag number of button 
}
 

Je vous remercie!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X