¿Cómo cambiar el estilo de una UIView cuando se toca?

Estoy haciendo Tappable diferente de UIView (no henetworkingan de UIControl) usando el siguiente código:

UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userTappedOnLink:)]; [labelView setUserInteractionEnabled:YES]; [labelView addGestureRecognizer:gesture]; 

pero también me gustaría cambiar el estilo cuando están resaltados. ¿Cómo puedo hacer eso?

Adjunte UILongPressGestureRecognizer en lugar de UITapGestureRecognizer a la vista principal y configure sus properties a su gusto. La forma de rastrear y responder a la selección es implementar el método userTappedOnLink de manera apropiada. Este método se llamará muchas veces en un corto período de time cuando se active el reconocimiento de gestos y sepa lo que está sucediendo mediante el seguimiento de los estados del reconocedor.

Implemente la subclass UIView y cree methods, como seleccionar y anular la selección, y personalizar las properties de vista para cada uno. Entonces, es solo cuestión de encontrar qué subclass UIView para seleccionar o anular la selección, y eso se hace fácilmente con el punto de retorno del método UIGestureRecognizer en la vista principal e iterar a través de sus subvenciones mientras se comtesting si el punto de contacto está dentro del marco particular de la subvista.

 - (IBAction)userTappedOnLink:(UIGestureRecognizer*)sender { switch (sender.state) { case UIGestureRecognizerStateBegan: { CGPoint touchPoint = [sender locationInView:self.parentView]; for (UIView *subView in [self.parentView subViews) { if (CGRectContainsPoint(subView.frame, tapPoint)) { self.activeSubView = self.subview; break; } } [self.activeSubView select]; case UIGestureRecognizerStateChanged:[self.activeSubView doNothing];; break; case UIGestureRecognizerStateEnded:[self.activeSubView deSelect]; self.activeSubView = nil; break; } } 

Hay dos forms de manejar events en iOS. El primero es utilizar la subclass UIView y anular los methods henetworkingados por UIView de la class UESponder (es decir, toquesBegan: withEvent, toquesMoved: withEvent, toesEnded: withEvent, toesCancelled: withEvent).

La segunda forma es crear una nueva instancia de class de reconocimiento de gestos y agregarla a su object UIView (como hizo) y luego crear un controller.

 - (IBAction)userTappedOnLink:(UIGestureRecognizer *)sender { // Changing view properties. } 

En ambos casos, puede cambiar las properties de UIView. Puede encontrar información útil en "Guía de event handling events" de Apple. Hay muchas lecturas, pero solo puedes echar un vistazo al "código de muestra relacionado" ( Touches y SimpleGestureRecognizers ).

La forma en que cambia las properties de estilo de los elementos de la interfaz en su aplicación depende de cuáles sean esas properties. A veces pueden ser animados, a veces no lo son. Por lo general, el código que cambia las properties de la vista se coloca dentro de la function touchesBegin o el gestor de identificadores de gestos. El código de ejemplo de MoveMe muestra cómo cambiar las properties de las vistas y animarlas. En el capítulo de identificadores de gestos de las properties del marco "Guía de event handling events" se cambian.

Logré resolver esto agregando un UIControl como una subvista en UIView. El UIControl es del mismo tamaño y tiene un background transparente que cambia cuando se resalta. ¡Funciona de maravilla!

bueno, no lo he probado, solo una sugerencia, maneja touchesbegin para esta vista y llamo [labelView addGestureRecognizer:gesture]; function. tal vez debería usar otra function, - (void)removeGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer .