Frage

Ich habe eine benutzerdefinierte Tabellenansicht Zelle, die Benutzer Gesten behandelt. Aber selbst wenn ich exclusiveTouch auf YES gesetzt, dem Zeitpunkt der y-Wert ändert um einen beliebigen Betrag, beginnt Scolling, auch wenn ich bin in der Mitte der Touch-Ereignisse zu verarbeiten. Wie verhindere ich die Tabelle aus Scrollen, wenn ich Touch-Ereignissen in der Zelle bin Umgang mit?

War es hilfreich?

Lösung

Also, der richtige Weg, leider bedingt zu umgehen, hängt von der superview. Für einige Ansicht und Veranstaltungen (wie UITableView wählen), müssen Sie die touchesBegan weiterleiten: Veranstaltung nextResponder, verfolgen Sie Ihre Geste, touchesMoved nach vorn: Veranstaltungen zum nextResponder, bis Sie erkennen Ihre Geste, und wenn es Sie senden ein touchesCancelled ausgelöst wird: zum nextResponder und verstecken alle anderen Ereignisse aus dem nächsten Responder (touchesEnded: und touchesCancelled :), bis Sie touchesEnded erhalten: oder touchesCancelled. selbst

In einem UIScrollView aber ist es der Spezialfall, dass es hängt nicht die nextResponder Scroll-Ereignisse zu behandeln auf seinem (Scrolling wird höchstwahrscheinlich in Methoden wie hitTest erkannt :). Also egal, was Sie in Bezug auf Weiterleitung tun oder Ereignisse oder nicht, Scrollen immer noch geschehen. Der einzige Weg, Scrollen, um zu verhindern geschehen ist auf der übergeordneten Ansicht deaktivieren Scrollen, sobald Ihre Geste erkannt wird, und dann scrollen wieder aktivieren, wenn es beendet ist oder abgebrochen wird.

Andere Tipps

Ich glaube, Sie brauchen UITableView Unterklasse und hitTest implementieren: withevent: Dies ist, wie ich es für eine Zelle Gewohnheit tat baute ich innerhalb der Zelle Gleiten nach links und rechts zu tun:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    NSIndexPath *indexPath = [self indexPathForRowAtPoint:point];
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];

    if ([cell isKindOfClass:[MyCustomCell class]])
    {
        return cell;
    }

    return [super hitTest:point withEvent:event];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top