Hi muss eine Aktion ausführen, wenn Benutzer die UIButton
berührte %Vor%Der Stammansicht-Controller meiner App ist tabbarviewcontroller und jede Registerkarte ist ein Navigationsansicht-Controller. In der viewWillAppear-Methode der Chat-Szene verberge ich die Tab-Leiste.
das Ergebnis ist, auf dem Gerät, wenn ich berühre, wird es nicht aufgerufen, und wenn ich meinen Finger ein wenig bewege, heißt es.
Hinweis:
Die Verwendung der Gestenerkennung "Lange drücken" funktioniert ebenfalls nicht.
Wenn ich den Button aus dem Tab-Bereich entferne, funktioniert er auf dem Gerät.
am Simulator ist alles in Ordnung.
Ich habe ein Beispielprojekt erstellt: Ссылка
Befindet sich diese Schaltfläche irgendwo innerhalb einer Scrollview (einschließlich Sammlung oder Tabellenansicht)? Wenn ja, dann ist das genau das erwartete Verhalten. Das System wartet, um zu sehen, ob Sie auf die Schaltfläche tippen oder die Bildlaufansicht ziehen. Von Apple:
Da eine Bildlaufansicht keine Bildlaufleisten hat, muss sie wissen, ob eine Berührung eine Absicht zum Blättern im Vergleich zu einer Absicht zum Verfolgen einer Teilansicht im Inhalt signalisiert. Um diese Feststellung zu treffen, fängt sie vorübergehend ein Aufsetzereignis ab, indem sie einen Timer startet und vor dem Zünden des Timers feststellt, ob der berührende Finger irgendeine Bewegung ausführt. Wenn der Zeitgeber ohne signifikante Positionsänderung ausgelöst wird, sendet die Bildlaufansicht Verfolgungsereignisse an die berührte Teilansicht der Inhaltsansicht. Wenn der Benutzer dann seinen Finger weit genug zurückzieht, bevor der Zeitgeber abgelaufen ist, löscht die Bildlaufansicht jede Verfolgung in der Unteransicht und führt das Scrollen selbst durch. Unterklassen können die Methoden
touchesShouldBegin:withEvent:inContentView:
,pagingEnabled,
undtouchesShouldCancelInContentView:
überschreiben (die in der Bildlaufansicht aufgerufen werden), um zu beeinflussen, wie die Bildlaufansicht Bildlaufgesten behandelt.
Wenn Sie dieses Verhalten nicht möchten, können Sie parentview.delaysContentTouches
auf NO
setzen. Möglicherweise müssen Sie auch canCancelContentTouches
auf NO
Haben Sie Unteransichten auf Ihrer Schaltfläche? Diese können die Berührungen abfangen und zu dem Verhalten führen, das Sie sehen.
Haben Sie UIGestureRecognizer in Ihrer Schaltflächenübersicht? Sie können eine solche Verzögerung verursachen.
Ich habe das gleiche Problem getroffen und habe es schließlich herausgefunden.
Das Problem hierbei ist, dass die Schaltfläche keine Aktion empfangen kann, da ihr Beobachter möglicherweise von den Gestenerkennern der Bildlaufansicht ausgeblendet wird.
Sie müssen dem Container der Audio-Schaltfläche eine Geste hinzufügen, den Gestenerkenner-Delegaten auf den View-Controller setzen und den Navigationscontroller popGestureRecognizer wie folgt ausblenden.
%Vor%Und schau es dir an, der Button kann jetzt dein Touchdown-Ereignis wie ein Zauberspruch beantworten.
Ich hatte dasselbe Problem und löste es.
In meinem Fall gibt es zwei nebeneinander liegende Schaltflächen. (Linke Taste ist Taste A. Rechte Taste ist Taste B.) ButtonA wird nicht Touchdown-Ereignis genannt. Aber ButtonB heißt Touchdown-Ereignis.
Ich habe versucht, pointInside
in der ButtonB-Klasse zu überschreiben.
Dann tippte ich auf ButtonA und rief pointInside von ButtonB !! Point.x war ein negativer Wert.
Also habe ich point und sendAction in der ButtonB-Klasse überprüft.
%Vor%Tags und Links objective-c ios cocoa-touch uikit