2016-07-11 8 views
1

Momentan stoße ich auf ein Problem, bei dem es Tabellenzellen gibt, die Berührungsereignisse erlauben, um dort Details zu erhalten. Wenn der Benutzer jedoch die Zelle 2-4 Mal innerhalb von 1 Sekunde drückt, verursacht dies mehrere Ansichtsstöße auf den Navigationsansicht-Controller. Dies führt zu offensichtlichen Fehlern, wenn die Ansichten ausgeblendet werden und der Navigationscontroller Schwierigkeiten hat, in eine Unteransicht zu wechseln und zurück zu kommen. Zu den meisten Fallen führen die meisten leider nicht mit einem Fehlerprotokoll. Dieses Verhalten sollte jedoch von vornherein nicht unterstützt werden. Die Frage ist neben Thread-Sperre gibt es andere Möglichkeiten, mehrere Berührungsereignisse auf UiButtons oder auf Tabellenzellen zu verhindern?Objective C touch Ereignisverriegelung

--Seite Info-- Seitliche Informationen, die Sie wollen, arbeite ich mit Xcode Version 6.4 aufgrund der HTTPS vs http Sicherheitseinstellungen in Xcode 7 hinzugefügt. Wenn spätere Versionen von Xcode automatisch Lösungen zu diesem dann implementieren, würde das sei auch gut zu wissen. Danke für deine Hilfe.

+0

Zeigen Sie Ihren Code, der von der Berührung geschieht. – Fogmeister

+0

Ich werde einige hier in einer Minute veröffentlichen. – Bored915

+0

Sie arbeiten zu viel vor ViewDidAppear im nächsten (pushed) UIViewController, der wiederum den UI-Thread blockiert. Dies führt dazu, dass Sie UITouchEvent empfangen, während Sie erwarten, eine Übergangsaktion für den neuen UIViewController einzugeben. Ich empfehle nicht, das userinteraction enable Flag zu verwenden. –

Antwort

3

Sie können eine Taste (oder Zelle) sperren, nachdem es angezapft:

button.userInteractionEnabled = NO; 

oder ganze Schnittstelle:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

und entriegeln, wenn Übergang/Laden durchgeführt wird.

+0

Das scheint wie es wird funktionieren, krank geben Sie einen Test und sehen. – Bored915

2

Wenn Sie die Berührungsereignisse nicht mit GCD drosseln möchten, wird in UIButton und UIGestureRecognizer eine enabled Eigenschaft angezeigt. Sie können die Schaltfläche nach einer Berührung einfach deaktivieren und erneut aktivieren, nachdem Sie den Detailansicht-Controller gedrückt haben.

Eine einfache Möglichkeit, es wieder zu aktivieren, in der viewWillAppear Methode des Controllers wäre Drücken die Detailansicht - auf diese Weise die enabled Eigenschaft würde automatisch zurückgesetzt, wenn Sie zu dieser Ansicht Controller gehen zurück, ohne zu UINavigationController hören mit Übergänge usw.