English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Solution pour le bouton UIButton iOS qui ne répond pas au clic

Préambule

Dans le développement quotidien, nous travaillons souvent avec des boutons, mais parfois nous nous heurtons à des problèmes difficiles à résoudre, c'est-à-dire que le bouton ne répond pas à l'événement de clic, à ce moment-là, nous devons vérifier les aspects suivants

Raison pour laquelle le bouton ne répond pas

1、Le bouton a été ajouté à un parent View sans interaction utilisateur, par exemple UIImageView, dans ce cas, activez l'interaction du parent View view.userInteractionEnabled = YES

Mettre à YES peut résoudre le problème

2、Le bouton lui-même est caché, lors du clic, vous ne cliquez pas sur le bouton, mais sur la View au-dessus, naturellement, il ne répondra pas

Il y a une méthode pour voir les calques ici, cliquez sur le bouton rouge de l'image suivante pour voir les éléments UI de l'interface en cours d'exécution, vous pouvez voir s'il y a des view qui cachent le bouton

3、Le frame du bouton dépasse le frame du parent View, c'est ce qui se produit le plus souvent, le frame du bouton doit être à l'intérieur du frame du parent View pour être efficace, comme dans l'image suivante, la zone de clic du bouton dans la boîte rouge ne répond pas.

Comment faire face à ce problème, continuez à lire en bas

Résoudre le problème de dépassement de la zone de clic

Ce type de situation est très susceptible de se produire, je vais vous donner un exemple que j'ai rencontré : la hauteur de la zone de chat est inférieure à la hauteur du clavier, et le champ de saisie est un sous-View de la zone de chat. Après que le clavier apparaisse, le champ de saisie monte et dépasse le frame du parent View. À ce moment-là, cliquer sur le bouton de la boîte rouge pour basculer l'action du clavier d'émotion ne répond pas.

Solution

Il y a deux méthodes ici, chaque fois qu'il y a un动作 de toucher, ces deux méthodes seront appelées

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

Redéfinir la méthode - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

C'est une méthode dans View, le processus de traitement est le suivant

  • D'abord, appeler la méthode pointInside:withEvent: de la vue actuelle pour juger si le point de touche est à l'intérieur de la vue actuelle ;
  • Si le retour est NO, alors hitTest:withEvent: retourne nil;
  • Si le retour est YES, alors un message hitTest:withEvent: est envoyé à tous les sous-vues de la vue actuelle, et l'ordre d'exploration de toutes les sous-vues est de haut en bas, c'est-à-dire de la fin de l'array subviews vers le début, jusqu'à ce qu'une sous-vue retourne un objet non vide ou que toutes les sous-vues soient explorées ;
  • Si le sous-vue retourne un objet non vide pour la première fois, la méthode hitTest:withEvent: retourne cet objet et la procédure de traitement est terminée ;
  • Si tous les sous-vues retournent non, la méthode hitTest:withEvent: retourne elle-même (self).
  • Finalement, cet événement tactile est traité par l'objet de vue retourné par la méthode hitTest:withEvent: de la fenêtre principale.

Donc, nous pouvons traiter en retournant nil, car à ce moment-là, le bouton est en dehors du View parent

//Retourner un view pour répondre à l'événement
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
 UIView *view = [super hitTest:point withEvent:event];
 if (view == nil){
  //Conversion de coordonnées
  CGPoint tempPoint = [self.testBtn convertPoint:point fromView:self];
  //Déterminer si le point de clic est dans la zone du bouton
  if (CGRectContainsPoint(self.testBtn.bounds, tempPoint)){
   //Retourner le bouton
   return _testBtn;
  }
 }
 return view;
}

Maintenant, le clic sur le bouton en dehors de la zone est également efficace

Résumé

Les solutions que l'éditeur vous présente ici pour le problème d'UIButton clic sans réponse iOS, j'espère qu'elles vous seront utiles. Si vous avez des questions, laissez-moi un message, l'éditeur répondra à temps. Merci également de votre soutien au tutoriel criant !

Déclaration : Le contenu de cet article est extrait du réseau, et appartient au propriétaire du droit d'auteur. Le contenu est apporté par les utilisateurs d'Internet et téléchargé spontanément. Ce site Web ne détient pas de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

Vous pourriez aussi aimer