Ich möchte ein langes Drücken auf a UITableViewCell
ausführen, um ein "Schnellzugriffsmenü" zu drucken. Hat das schon jemand gemacht?
Besonders die Geste erkennen an UITableView
?
Ich möchte ein langes Drücken auf a UITableViewCell
ausführen, um ein "Schnellzugriffsmenü" zu drucken. Hat das schon jemand gemacht?
Besonders die Geste erkennen an UITableView
?
Fügen Sie zuerst den Gestenerkenner für langes Drücken zur Tabellenansicht hinzu:
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //seconds
lpgr.delegate = self;
[self.myTableView addGestureRecognizer:lpgr];
[lpgr release];
Dann im Gestenhandler:
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
CGPoint p = [gestureRecognizer locationInView:self.myTableView];
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:p];
if (indexPath == nil) {
NSLog(@"long press on table view but not on a row");
} else if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
NSLog(@"long press on table view at row %ld", indexPath.row);
} else {
NSLog(@"gestureRecognizer.state = %ld", gestureRecognizer.state);
}
}
Sie müssen damit vorsichtig sein, damit das normale Tippen des Benutzers auf die Zelle nicht beeinträchtigt wird. Beachten Sie auch, dass dies handleLongPress
möglicherweise mehrmals ausgelöst wird (dies ist auf Änderungen des Status der Gestenerkennung zurückzuführen).
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) ...
.UITableView
, nicht an denUITableViewCell
... anzuhängen. )Ich habe die Antwort von Anna-Karenina verwendet und sie funktioniert fast hervorragend mit einem sehr schwerwiegenden Fehler.
Wenn Sie Abschnitte verwenden und lange auf den Abschnittstitel drücken, erhalten Sie ein falsches Ergebnis beim Drücken der ersten Zeile in diesem Abschnitt. Ich habe unten eine feste Version hinzugefügt (einschließlich der Filterung von Dummy-Anrufen basierend auf dem Gestenstatus pro Anna-Karenina Vorschlag).
quelle
Antwort in Swift 5 (Fortsetzung von Rickys Antwort in Swift)
quelle
Hier finden Sie geklärte Anweisungen, die Dawn Songs Antwort und Marmors Antwort kombinieren.
Ziehen Sie einen langen Press Gestenerkenner und legen Sie ihn in Ihrer Tabellenzelle ab. Es springt zum Ende der Liste auf der linken Seite.
Schließen Sie dann den Gestenerkenner genauso an, wie Sie eine Schaltfläche anschließen würden.
Fügen Sie den Code von Marmor im Aktionshandler hinzu
}}
quelle
Es scheint effizienter zu sein, den Erkenner wie hier gezeigt direkt zur Zelle hinzuzufügen:
Tippen und halten Sie für TableView-Zellen, damals und heute
(Scrollen Sie zum Beispiel unten)
quelle
Antwort in Swift:
Fügen Sie
UIGestureRecognizerDelegate
Ihrem UITableViewController einen Delegaten hinzu.Innerhalb von UITableViewController:
Und die Funktion:
quelle
Ich habe eine kleine Kategorie auf UITableView zusammengestellt, basierend auf Anna Kareninas hervorragender Antwort.
Auf diese Weise haben Sie eine bequeme Delegierungsmethode, wie Sie es gewohnt sind, wenn Sie mit normalen Tabellenansichten arbeiten. Hör zu:
Wenn Sie dies in einem UITableViewController verwenden möchten, müssen Sie wahrscheinlich eine Unterklasse erstellen und das neue Protokoll einhalten.
Es funktioniert großartig für mich, hoffe es hilft anderen!
quelle
Swift 3-Antwort mit moderner Syntax, Einbeziehung anderer Antworten und Eliminierung nicht benötigten Codes.
quelle
Fügen Sie einfach UILongPressGestureRecognizer zu der angegebenen Prototypzelle im Storyboard hinzu und ziehen Sie die Geste in die .m-Datei von viewController, um eine Aktionsmethode zu erstellen. Ich habe es geschafft, wie ich sagte.
quelle
Verwenden Sie die UITouch-Zeitstempeleigenschaft in touchBegan, um einen Timer zu starten oder zu stoppen, wenn touchEnded ausgelöst wurde
quelle