iphone - color - menu ios
Manejar Touch Event en UILabel y conectarlo a un IBAction (4)
Ok, entonces tengo un UILabel
creado en el constructor de interfaz que muestra algo de texto predeterminado de "toque para comenzar".
Cuando el usuario toca el UILabel
, quiero que active un método IBAction: -(IBAction)next;
que actualiza el texto en la etiqueta para decir algo nuevo.
Sería realmente conveniente si esto me permitiera simplemente arrastrar una conexión desde mi método a mi etiqueta y luego seleccionar retocar adentro, como con un botón. pero, por desgracia, no hay cigarro.
así que de todos modos, supongo que mi pregunta es, ¿tendré que subclase a UILabel
para que esto funcione? ¿O hay alguna forma de que pueda arrastrar un botón sobre la etiqueta, pero que sea 0% opaco? ¿O hay una solución más simple que me falta?
Echale un vistazo:
UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];
El truco es habilitar la interacción del usuario.
Puede usar un UIButton, hacerlo transparente, es decir, tipo personalizado sin una imagen, y agregarle un UILabel (centrado). Luego conecte los eventos de botón normales.
UILabel hereda de UIView que hereda de UIResponder. Todos los objetos UIresponder pueden manejar eventos táctiles. Por lo tanto, en su archivo de clase que conoce acerca de su vista (que contiene la UIlabel) implemente:
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;
En el constructor de interfaces, establezca el valor de etiqueta de UILabel. cuando ocurran toques en su método touchesBegan, verifique el valor de la etiqueta de la vista a la que pertenece la etiqueta:
UITouch *touch = [touches anyObject];
if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";
Usted conecta su código en su archivo de clase con el objeto UILabel en el constructor de interfaces al declarar su variable de instancia UILabel con el prefijo IBOutlet:
IBOutlet UILabel *label;
Luego en el constructor de interfaz puedes conectarlos.
Swift 3
Usted tiene un IBOutlet
@IBOutlet var label: UILabel!
En el que habilita la interacción del usuario y agrega un reconocedor de gestos
label.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))
label.addGestureRecognizer(tapGesture)
Y finalmente, maneja el tap
func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) {
// Your code goes here
}