Frage

Ich habe ein paar UIViews gestapelt auf dem anderen (nicht verschachtelt). Ich möchte, dass sie alle auf Berührungen reagieren, aber es scheint, dass die oberste Ansicht die darunter liegenden Ansichten verdeckt und sie daran hindert, Berührungsereignisse zu erhalten.

Zuerst dachte ich, ich würde alle Touch -Events mit der obersten Aussicht fangen und dann manuell anrufen
hitTest, oder pointInside Methoden zu allen zugrunde liegenden Ansichten, aber ich fand heraus, dass beide Methoden irgendwie privat sind(könnte es sein?) und kann nicht zugegriffen werden.

Irgendwelche Ideen, wie man es durchzieht?

War es hilfreich?

Lösung

Sie können überprüfen, ob die Berührung für Ihre oberste Ansicht ist. Wenn dies nicht der Fall ist, können Sie dieselbe Methode Ihrer Übersicht aufrufen. So etwas wie [self.superview samemethod: sameparameter].

Ihre oberste Ansicht hat eine Methode

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

In dieser Methode machen Sie Ihre Logik, oder? In der Methode können Sie nicht überprüfen, ob der empfangene Berühr

UITouch *touch = [touches anyObject];
[touch locationInView:self];

Und wenn Sie es nicht an die gleiche Methode der Übersicht übergeben

[self.superview touchesEnded:touches withEvent:event];

Andere Tipps

Berührungen werden zu einer einzigen Ansicht gesendet. Diese Ansicht kann sie dann optional die Responderkette übergeben. Wenn Sie Berührungen zu einer Sammlung von Ansichten erledigen möchten, sollten Sie diese Ereignisse bis zum nächsten Responder weiterleiten und einen gemeinsamen Elternteil aller von ihnen haben (oder deren Ansichtsregler, da der Controller auch Teil der Responderkette ist) mit diesen umgehen Berührungen.

https://developer.apple.com/library/mac/documentation/general/devpedia-cocoaapp-mosx/responder.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top