Verhindern, dass Behinderte UIButton Vermehrung von touch-events
Meine Anwendung hat zwei überlappende UIButtons. Die Obere Taste kann deaktiviert werden, manchmal. Jedoch, in diesem Fall touch-Ereignisse empfängt, scheinen weitergegeben werden, um die zugrunde liegende Ansicht, die in meinem Fall ist der andere button.
Was ich brauche, ist die Obere Taste abfangen aller berührt und verhindert, dass Sie vom erreichen der unteren Taste, auch im deaktivierten Zustand (ich würde glücklich sein, auch wenn die für Sie vorgesehene Aktion aufgerufen wird ist im deaktivierten Zustand).
Bisher habe ich versucht:
[topButton setUserInteractionEnabled:YES];
und
[topButton setExclusiveTouch:YES];
wenn letzteres der Fall ist wohl nicht erwünscht, da ich noch die Schaltfläche unten, reagieren auf Ereignisse, wenn es die ersten anzeigen geklickt. Entweder Weg, keiner von Ihnen arbeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich noch die folgende Methode, um superview der Behinderten-Taste:
Funktioniert dies auch mit UITableView Zellen.
Mir gelungen, diese Arbeit, wie ich brauchte, mit einer leicht modifizierten version @kolyuchiy's Antwort oben. Ich überschrieb
hitTest:withEvent:
Methode in meinemUIButton
Unterklasse, die Rückkehrself
wenn die Option deaktiviert und der Punkt ist in der Sicht der Rahmen, so dass die touch verbraucht wird, aber der button-Ereignisbehandlung nicht aufgerufen.Nach dem Versuch @kolyuchiy (die braucht, um zu ändern
UIButton
Verhalten außerhalb seiner Reichweite) und @patrick-lynch (die einfach nicht für mich arbeiten) Lösungen kam mit mehr elegant, das gilt fürUIButton
Unterklasse:Was ich getan habe ist die Platzierung UIImageView der gleichen Größe mit UIButton nur unter dem UIButton. Dann, obwohl Sie deaktivieren UIButton, touch-events nicht ausbreiten UIImageView.
Ich weiß, das ist spät, aber ich Las eine Menge von ähnlichen Fragen und keiner der Antworten, die ich Lesen konnte, war hilfreich für mich (einige von Ihnen, weil nicht funktioniert und die anderen, weil ich nicht so die Lösung), so dass ich eine bessere Lösung gefunden forme und ich Teile Sie hier, um zu helfen, mögliche zukünftige Benutzer das Lesen dieser Frage.
Lösung
Habe ich immer einen container mit einigen (oder nur einem) Tasten im inneren. Also schließe ich die
IBOutlet
des Schaltflächen-container auf dieUIViewController
oderUIView
denen ich arbeite:Und ich eine null-single tap gesture recognizer wie unten:
Mit dieser Problemumgehung, wenn eine Schaltfläche deaktiviert ist, wird die
buttonsContainer
fängt dieses Ereignis ab und tun nichts mit ihm.Hoffe, das hilft.
Erstellen Sie eine Unterklasse der Taste, dann überschreiben diese Methoden, so dass die Taste fangen Ereignisse, sondern ignorieren Sie Sie, wenn einige-Eigenschaft der Schaltfläche auf NEIN gesetzt ist:
Diese sind Methoden von UIResponder.
Haben Sie nur aufrufen, Ihre [super ...] Methode, wenn Sie das event behandelt, sonst nur nennen Sie es nicht und zurückkehren, wenn Sie wollen, dass die Ereignisse "gegessen".
Sehen auch in diesem Fall ist es notwendig: Die Beobachtung Prise multi-touch-gesten in einem UITableView