English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Introducción
En el desarrollo diario, a menudo nos enfrentamos a botones, pero a veces nos encontramos con problemas difíciles de manejar, como que el botón no responde al evento de clic, en este caso, necesitamos investigar desde varios aspectos
Razones por las que el botón no responde
1、El botón se ha agregado a un padreView sin interacción del usuario, por ejemplo, UIImageView, en este caso, active la interacción del padreView view.userInteractionEnabled = YES
Establecerlo en YES puede resolver el problema
2、El botón mismo está obstruido, al hacer clic no se hace clic en el botón, sino en la vista de nivel superior, por lo que naturalmente no se responderá
Aquí hay un método para ver las capas, como se muestra en la imagen siguiente, haciendo clic en el botón del cuadro rojo puede ver los elementos UI de la interfaz de ejecución actual, y puede ver si hay alguna vista que obstruya el botón
3、El frame del botón está fuera del frame del padre, esto es lo más común, el frame del botón debe estar dentro del frame del padre para que sea efectivo al hacer clic, como se muestra en la imagen siguiente. El área de clic del botón en el cuadro rojo no se responde.
¿Qué hacer si se encuentra con este problema? Sigue leyendo a continuación
Solución al problema de la superposición del área de clic
Esta situación es muy posible de ocurrir, aquí hay un ejemplo que me ha pasado: la altura del área de chat es menor que la altura del teclado, y el cuadro de entrada es una vista secundaria del área de chat. Después de que se abre el teclado, el cuadro de entrada se mueve hacia arriba y sale del frame del padre. En este momento, al hacer clic en el botón del cuadro rojo para cambiar la acción del teclado de emoticones, no se responde.
Solución
Aquí hay dos métodos, que se ejecutan cada vez que hay un movimiento de toque
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
Anular el método - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
Este es un método en View, y el flujo de procesamiento es el siguiente
Por lo tanto, podemos manejar la devolución de nil, porque en este momento el botón está fuera del View padre
//Devuelve un view para responder al evento - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *view = [super hitTest:point withEvent:event]; if (view == nil){ //Transformar coordenadas CGPoint tempPoint = [self.testBtn convertPoint:point fromView:self]; //判断点击的点是否在按钮区域内 if (CGRectContainsPoint(self.testBtn.bounds, tempPoint)){ //Volver al botón return _testBtn; } } return view; }
En este momento, el clic en el botón en el área exterior también tiene efecto
Resumen
Lo que se menciona anteriormente es la solución que el editor les ha presentado para el problema de que el UIButton de iOS no responde al clic, espero que les sea útil. Si tienen alguna pregunta, déjenme un mensaje, el editor les responderá a tiempo. También muy agradecido por el apoyo a los tutoriales de gritos!
Declaración: el contenido de este artículo se ha obtenido de la red, pertenece a los autores originales, el contenido se ha contribuido y subido por los usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume responsabilidad alguna por la responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar, y proporcionar evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.