2009-04-30 8 views
9

Me pregunto si alguien ha usado el método userInteractionEnabled en una 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. ¡Aclamaciones!UILabel: Usando el método UserInteractionEnabled en una etiqueta

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

El InfoButton ya está funcionando y está usando un IBAction para activar el método. Me gustaría saber cómo conectar la etiqueta para implementar el mismo método. Eso es todo. ¡Salud!

+0

Usted obtendrá respuestas más útiles si clarificar su pregunta: ¿Con qué necesitas ayuda específicamente? ¿Qué has intentado que no funcionó, y/o qué es exactamente lo que quieres hacer que no sabes cómo lograr? – smorgan

+0

@smorgan: Gracias, actualicé la pregunta. Espero que ayude. –

Respuesta

13

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

Lo que es posible que desee hacer es reemplazar el método de la UIView que contiene sus UIButton y UILabel subvistas touchesBegan:withEvent:.

Dentro de este método, compruebe si alguno de los toques UITouch cae dentro de los límites del UILabel.

Es decir, ¿el elemento CGPoint[touch locationInView] se cruzan con el elemento CGRect[infoLabel bounds]? Busque en la función CGRectContainsPoint para ejecutar esta prueba.

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

+0

Gracias Alex, voy a intentarlo y ver qué puedo hacer. ¡Aclamaciones! –

7

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

+0

Eso es realmente un buen truco. – fyasar

1

Estoy de acuerdo con Alex el 30 de abril de 2009 y mi propuesta es solo una adición a la misma, si no quiere ir con un UIButton. La forma en que lo resolvió fue creando un UILabel través

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

entonces se puede anular los toques * métodos 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"); 
     } 
    }  
+0

Esto es mejor. – benck

+0

Me pregunto por qué tengo un código similar al tuyo, pero el mío no está tocando acordesBegan –

Cuestiones relacionadas