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

Lösung für das Nichtantworten von UIButton-Touches in iOS

Vorwort

Im täglichen Entwicklungsprozess arbeiten wir oft mit Buttons, aber manchmal stoßen wir auf Probleme, die schwer zu lösen sind, nämlich dass der Button auf Klickereignisse nicht reagiert. In diesem Fall müssen wir die folgenden Aspekte überprüfen

Ursachen für die Nichterkenntnis des Buttons

1, der Button wurde auf einen übergeordneten View ohne Benutzerinteraktion hinzugefügt, z.B. UIImageView, in diesem Fall muss das Benutzerinteraktion des übergeordneten Ansicht aktiviert werden view.userInteractionEnabled = YES

Durch die Einstellung auf YES kann das Problem gelöst werden

2, der Button selbst wird verdeckt, beim Klicken wird nicht auf den Button geklickt, sondern auf eine oberste View darüber, natürlicherweise wird die Aktion nicht erkannt

Hier ist ein Weg, um Schichten zu betrachten, wie im folgenden Bild gezeigt, kann man durch Klicken auf den Button im roten Rahmen die UI-Elemente der aktuellen Laufenden Oberfläche sehen und überprüfen, ob es eine View gibt, die den Button verdeckt

3, der Frame des Buttons ragt über den Frame des übergeordneten Ansicht hinaus, dies ist das am häufigsten vorkommende Problem, der Frame des Buttons muss innerhalb des Frames des übergeordneten Ansicht angeklickt werden, um wirksam zu sein, wie im folgenden Bild gezeigt, wird der Bereich im roten Rahmen des Buttons nicht erkannt.

Was soll man tun, wenn dieses Problem auftritt? Bitte lesen Sie weiter unten weiter;

Lösung für das Problem, dass der Klickbereich übersteigt

Diese Situation kann tatsächlich sehr wahrscheinlich auftreten, nimm ein Beispiel, das ich selbst erlebt habe: Die Höhe des Chat-Bereichs ist kleiner als die Höhe der Tastatur, und das Eingabefeld ist ein Unteransicht des Chat-Bereichs. Nachdem die Tastatur aufgerufen wird, verschiebt sich das Eingabefeld nach oben und ragt über den Frame des übergeordneten Ansicht hinaus. In diesem Moment wird auf den Button im roten Rahmen geklickt, um die Aktion der Emotikontastatur umzuschalten, und die Aktion wird nicht erkannt.

Lösung

Hier gibt es zwei Methoden, die jedes Mal ausgeführt werden, wenn eine Berührungshandlung auftritt

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

Methode überschreiben - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

Dies ist eine Methode in View, der Ablauf ist wie folgt

  • Zunächst wird die Methode pointInside:withEvent: der aktuellen Ansicht aufgerufen, um zu überprüfen, ob der Berührungspunkt im aktuellen Ansicht liegt;
  • Wenn NO zurückgegeben wird, gibt hitTest:withEvent: nil zurück;
  • Wenn YES zurückgegeben wird, wird eine hitTest:withEvent:-Nachricht an alle Unteransichten der aktuellen Ansicht gesendet, die Reihenfolge der Durchsuchung der Unteransichten ist von oben nach unten, d.h. von der Ende des Arrays subviews vorwärts, bis ein Unteransicht-Objekt nicht leer zurückgegeben wird oder alle Unteransichten durchsucht sind;
  • Wenn das erste Mal ein Unteransicht-Objekt nicht leer zurückgegeben wird, gibt die Methode hitTest:withEvent: dieses Objekt zurück und die Verarbeitung wird beendet;
  • Wenn alle Unteransichten keine ja zurückgeben, gibt die hitTest:withEvent:-Methode sich selbst (self) zurück.
  • Am Ende wird dieses Berührungsevent an das View-Objekt zurückgegeben, das vom hitTest:withEvent:-Methodenaufruf des Hauptfensters zurückgegeben wird.

Daher können wir bei der Rückgabe von nil verarbeiten, da der Button in diesem Moment außerhalb des ElternViews liegt

//Gibt ein view zurück, um auf das Ereignis zu reagieren
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
 UIView *view = [super hitTest:point withEvent:event];
 if (view == nil){
  //Koordinaten umwandeln
  CGPoint tempPoint = [self.testBtn convertPoint:point fromView:self];
  //Überprüfen Sie, ob der Klickpunkt im Bereich des Buttons liegt
  if (CGRectContainsPoint(self.testBtn.bounds, tempPoint)){
   //Rückgabe des Buttons
   return _testBtn;
  }
 }
 return view;
}

Jetzt ist der Klick auf den Button auch außerhalb des Bereichs wirksam

Zusammenfassung

Wie oben erwähnt, ist dies von mir vorgestellten Lösung für das Problem, dass der iOS UIButton-Klick nicht reagiert. Ich hoffe, es hilft Ihnen weiter. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht, und ich werde umgehend antworten. Ich danke auch sehr für Ihre Unterstützung für das Shouting-Tutorial!

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet entnommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetnutzern selbstständig bereitgestellt und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Diese Website übernimmt keine rechtlichen Verantwortlichkeiten. Wenn Sie verdächtige urheberrechtliche Inhalte finden, senden Sie bitte eine E-Mail an: notice#oldtoolbag.com (bei der Übermittlung von E-Mails, ersetzen Sie bitte # durch @ und geben Sie eine Beschwerde ab, und stellen Sie relevante Beweise zur Verfügung. Bei nachgewiesener Täuschung wird diese Website den fraglichen Inhalt sofort löschen.)

Gefällt Ihnen