UILabel: Uso del método userInteractionEnabled en una etiqueta
-
03-07-2019 - |
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!
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");
}
}