Pregunta

Me pregunto si alguien ha utilizado el método userInteractionEnabled en un UILabel para permitir que la etiqueta actúe como un botón (o simplemente para activar un método). Cualquier ayuda sería muy apreciada. ¡Saludos!

Actualización (4/30/09 @ 1: 07pm) Aclaración: Tengo un InfoButton estándar y al lado quiero colocar una etiqueta con el texto "configuración". y me gustaría que la etiqueta funcionara como el botón (que se desplaza a una pantalla de configuración. Por lo tanto, básicamente necesito vincular el showSettinsView ya definido a la etiqueta "infoLabel"; un usuario hace clic en el botón info o el infoLabel y el método dispara.

El infoButton ya está funcionando y está utilizando una IBAction para activar el método. Me gustaría saber cómo conectar la etiqueta para implementar el mismo método. Eso es todo. ¡Saludos!

¿Fue útil?

Solución

userInteractionEnabled no es un método sino una propiedad. Pero creo que querrá establecer esto en YES para permitir que los eventos lleguen a la supervista UIView .

Lo que puede querer hacer es anular el método touchesBegan: withEvent: del UIView que contiene su UIButton y UILabel subvistas.

Dentro de este método, pruebe si alguno de los toques UITouch se encuentra dentro de los límites de UILabel .

Es decir, el elemento CGPoint [touch locationInView] se cruza con el elemento CGRect [límites de la etiqueta de información] ? Busque la función CGRectContainsPoint para ejecutar esta prueba.

Si es así, dispare un NSNotification que llame al mismo selector IBAction que el UIButton .

Otros consejos

Otra solución podría ser utilizar un UIButton con su tipo configurado como personalizado, en lugar de un UILabel . De esta manera, su segundo botón se verá como un UILabel , y puede configurarlo para activar el método showSettingsView .

Estoy de acuerdo con Alex el 30 de abril de '09 y mi propuesta es solo una adición, si no quieres ir con un UIButton. La forma en que lo resolví fue creando un UILabel a través de

- (id)initWithFrame:(CGRect)frame
{
    label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
    ...
    [label setUserInteractionEnabled: YES];
    [self addSubview: label];
}

entonces puede anular los métodos touch * como touchesBegan, touchesEnded con algo como

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
      UITouch *touch = [touches anyObject];
      if([touch view] == label) {
          NSLog(@"I've been touched");
       }
   }     
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top