UIButton Touch-down-Aktion, die beim Berühren nicht aufgerufen wird, aber beim Bewegen der Touch aufgerufen wird

8

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:

  1. Die Verwendung der Gestenerkennung "Lange drücken" funktioniert ebenfalls nicht.

  2. Wenn ich den Button aus dem Tab-Bereich entferne, funktioniert er auf dem Gerät.

  3. am Simulator ist alles in Ordnung.

Ich habe ein Beispielprojekt erstellt: Ссылка

    
OMGPOP 09.03.2014, 17:59
quelle

6 Antworten

9

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, und touchesShouldCancelInContentView: ü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

setzen     
mackworth 10.03.2014 17:19
quelle
8

Hi @OMGPOP Ich habe das gleiche Problem mit dir, jetzt habe ich es unter Code hinzufügen hinzugefügt:

%Vor%

Ich bin mir sicher, dass es dein Retter ist, denn ich habe deinen Beispielcode heruntergeladen und obigen Code hinzugefügt. Es funktioniert gut. so:

%Vor%     
jhondge 23.09.2015 17:11
quelle
0

Haben Sie Unteransichten auf Ihrer Schaltfläche? Diese können die Berührungen abfangen und zu dem Verhalten führen, das Sie sehen.

    
niklassaers 09.03.2014 22:07
quelle
0

Haben Sie UIGestureRecognizer in Ihrer Schaltflächenübersicht? Sie können eine solche Verzögerung verursachen.

    
Krivoblotsky 15.03.2014 18:30
quelle
0

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.

    
albert_lee 05.08.2014 10:42
quelle
0

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.

%Vor%

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%     
sagaraya 16.07.2015 01:50
quelle

Tags und Links