English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Pré-face
No desenvolvimento diário, frequentemente lidamos com botões, mas às vezes encontramos problemas difíceis de lidar, como botões que não respondem a eventos de clique. Neste caso, precisamos investigar a seguir
Razão pelo qual o botão não responde
1O botão foi adicionado a um paiView que não permite interação do usuário, por exemplo, UIImageView, neste caso, habilite a interação do paiView view.userInteractionEnabled = YES
Definir como YES pode resolver o problema
2O botão em si está obscurecido, ao clicar, não está clicando no botão, mas na camada View acima dele, naturalmente, não será respondido
Aqui está um método para ver a camada, na imagem a seguir, clicando no botão dentro da caixa vermelha, você pode ver os elementos UI da interface de execução atual, você pode ver se há view obscurecendo o botão
3O frame do botão ultrapassa o frame do pai, isso é o mais fácil de acontecer, o frame do botão deve estar dentro do frame do pai para que o clique seja válido, como na imagem a seguir, a área clicável do botão dentro da caixa vermelha não é respondida.
O que fazer se encontrar esse problema? Continue lendo abaixo
Solução para o problema de clique fora da área
Essa situação pode acontecer muito frequentemente, por exemplo, a altura da área de chat é menor que a altura do teclado, e o campo de entrada é um subView da área de chat. Quando o teclado é acionado, o campo de entrada se move para cima e ultrapassa o frame do pai. Neste momento, ao clicar no botão dentro da caixa vermelha para alternar a ação do teclado de expressão, o clique não é respondido.
Solução
Aqui há dois métodos, que são executados a cada toque
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
Sobrescrever método - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
Este é um método dentro de View, e o fluxo de trabalho é o seguinte
Portanto, podemos lidar com o retorno nil, porque neste momento, o botão está fora do View pai
//Retorna um view para responder ao evento - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *view = [super hitTest:point withEvent:event]; if (view == nil){ //Converter coordenadas CGPoint tempPoint = [self.testBtn convertPoint:point fromView:self]; //Verificar se o ponto de clique está dentro da área do botão if (CGRectContainsPoint(self.testBtn.bounds, tempPoint)){ //Botão de retorno return _testBtn; } } return view; }
Agora, o clique em uma área fora do botão também tem efeito
Resumo
O que foi mencionado acima é a solução que o editor apresentou para o problema de clique irrelevante do UIButton iOS, esperamos que ajude a todos. Se você tiver alguma dúvida, por favor, deixe um comentário, o editor responderá a todos a tempo. Agradecemos também o apoio ao tutorial de gritos!
Declaração: O conteúdo deste artigo é extraído da Internet, pertence ao respectivo detentor dos direitos autorais, foi contribuído e carregado voluntariamente pelos usuários da Internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidades legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Caso seja confirmado, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)