Detectar pulsación de botón durante N segundos

18 June 2008

(Los fuentes del ejemplo están disponibles en el pie del artículo).

Como en otras ocasiones, nos alimentamos de las dudas y preguntas de los usuarios del foro para mostrar ejemplos prácticos para ciertos casos.

En este caso, nuestro colaborador pequenionoa nos consultaba acerca de la posibilidad de lanzar una función, tras llevar 5 segundos pulsados un botón. Estoy seguro que habrá forma más sencilla de hacerlo, incluso utilizando los eventos de UIControl, pero nos hemos puesto manos a la obra y sin mucha dificultad nos hemos escrito las funciones necesarias para controlar nosotros mismos la pulsación de un botón durante n segundos.

La idea es que cuando pulsemos un botón, activemos un contador de tiempo (NSTimer) que será llamado cada segundo. Cuando levantemos la pulsación de nuestro botón el contador se reseteará a 0. Mientras mantengamos pulsado el botón, y no levantemos la pulsación, la función de nuestro timer será llamada cada segundo e iremos aumentando un contador interno. Cuando este contador llegue a 5, esto indicará que el botón sigue pulsado y que no se ha levantado su pulsación, con lo que obtendremos nuestro objetivo.

En el ejemplo que os podéis descargar desde este artículo, hemos seguido los siguientes pasos:

1. Creación de un proyecto de tipo View Based Application.

2. Modificación de nuestra vista en recursos buttonPressed2ViewController.xib, a la cual hemos añadido un botón.

3. Definimos dos funciones ( down y up ) a nuestro botón en recursos, desde la ventana inspector, para controlar a que funciones llamaremos cuando pulsemos y levantemos la pulsación.



A continuación, una vez creadas nuestras funciones, delegaremos los eventos de Touch Down, Touch Up Inside y Touch Up Outside de nuestro botón a nuestras dos funciones propias.



4. En nuestra clase controladora, implementaremos estas dos funciones que nos habíamos definido en el fichero de recursos:

[cpp]
-(void)down {
 if( timer == nil ) // El control timer no ha sido creado aún.
  timer = [NSTimer scheduledTimerWithTimeInterval:(1.0) target:self selector:@selector(timerFire) userInfo:nil repeats:YES];
 nTimes=0;
}

-(void)up {

// Reseteamos nuestro control timer
 [timer invalidate];
 timer = nil;
}
[/cpp]
  

5. Para terminar, detectaremos cuantos segundos lleva pulsado nuestro botón gracias a nuestro contador interno, que es aumentado cada vez que nuestro control Timer es lanzado. (Recordemos que era cada segundo):

[cpp]
-(void) timerFire
{
 nTimes++;
 if( nTimes == 5 )
 {
  nTimes=0;
  [self mostrarMensaje];
 }
}

- (void) mostrarMensaje
{
 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Atención" message:@"
"
  delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
  [alert show];
  [alert release];
}
[/cpp]
 

Igualmente, en el ejemplo que os podéis descargar, he dejado el código comentado para crear el botón y definir las funciones down y up mediante código sin tener que editar nuestro fichero de recursos. 

Espero que os sirva.

Descargar ejemplo: buttonpressed2.zip
Detectar pulsación de botón durante N segundos

Comentarios recientes

  • 18 June 2008
    pequenionoa dijo:

    Gran artículo. Muy útil para controlar posibles descuidos de los usuarios al pulsar botones de Borrar. Saludos.

Deja un comentario

Escrito por:

Administrador

Sin categoría
xCodeUIAlertViewUIButtonNSTimer

Utilizamos cookies propias y de terceros para mantener la sesión o sus preferencias, recopilar estadísticas y proporcionar contenidos conforme a sus intereses. Si continua navegando, utiliza los servicios de la web o pulsa el botón, está aceptando su instalación y el uso que hacemos de ellas. Puede obtener más información sobre como revocar su consentimiento o cómo cambiar la configuración en este enlace.