Chciałbym poradzić sobie z długim naciśnięciem przycisku a, UITableViewCell
aby wydrukować „menu szybkiego dostępu”. Czy ktoś już to zrobił?
W szczególności gest rozpoznaje UITableView
?
Chciałbym poradzić sobie z długim naciśnięciem przycisku a, UITableViewCell
aby wydrukować „menu szybkiego dostępu”. Czy ktoś już to zrobił?
W szczególności gest rozpoznaje UITableView
?
Najpierw dodaj rozpoznawanie gestów długiego naciśnięcia do widoku tabeli:
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //seconds
lpgr.delegate = self;
[self.myTableView addGestureRecognizer:lpgr];
[lpgr release];
Następnie w module obsługi gestów:
-(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);
}
}
Trzeba uważać na to, aby nie zakłócało normalnego stukania komórki przez użytkownika, a także pamiętać, że handleLongPress
może strzelać wiele razy (będzie to spowodowane zmianami stanu rozpoznawania gestów).
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) ...
. :UITableView
, a nieUITableViewCell
...)Użyłem odpowiedzi Anny-Kareniny i działa ona prawie doskonale z bardzo poważnym błędem.
Jeśli używasz sekcji, długie naciśnięcie tytułu sekcji da zły wynik naciśnięcia pierwszego wiersza w tej sekcji, dodałem poniżej poprawioną wersję (w tym filtrowanie fałszywych wywołań na podstawie stanu gestu według Sugestia Anny-Kareniny).
źródło
Odpowiedź w Swift 5 (Kontynuacja odpowiedzi Ricky w Swift)
źródło
Oto wyjaśnione instrukcje łączące odpowiedź Dawn Song i odpowiedź Marmora.
Przeciągnij długi przycisk Rozpoznawanie gestów i upuść go w komórce tabeli. Przeskoczy na dół listy po lewej stronie.
Następnie podłącz rozpoznawanie gestów w taki sam sposób jak przycisk.
Dodaj kod z Marmor w module obsługi akcji
}
źródło
Wygląda na bardziej wydajne dodawanie modułu rozpoznającego bezpośrednio do komórki, jak pokazano tutaj:
Naciśnij i przytrzymaj, aby wyświetlić komórki TableView, a następnie i teraz
(przewiń do przykładu na dole)
źródło
Odpowiedź w Swift:
Dodaj delegata
UIGestureRecognizerDelegate
do swojego UITableViewController.W ramach UITableViewController:
I funkcja:
źródło
Stworzyłem małą kategorię w UITableView na podstawie doskonałej odpowiedzi Anny Kareniny.
W ten sposób będziesz mieć wygodną metodę delegowania, do której jesteś przyzwyczajony, gdy masz do czynienia ze zwykłymi widokami tabel. Sprawdź to:
Jeśli chcesz użyć tego w UITableViewController, prawdopodobnie musisz podklasę i dostosować się do nowego protokołu.
Działa mi świetnie, mam nadzieję, że pomaga innym!
źródło
Odpowiedź Swift 3, przy użyciu nowoczesnej składni, uwzględnienia innych odpowiedzi i wyeliminowania niepotrzebnego kodu.
źródło
Wystarczy dodać UILongPressGestureRecognizer do podanej komórki prototypowej w serii ujęć, a następnie przeciągnąć gest do pliku .m viewController, aby utworzyć metodę akcji. Zrobiłem to, jak powiedziałem.
źródło
Użyj właściwości znacznika czasu UITouch w touchach Rozpocznij, aby uruchomić stoper lub zatrzymać go po dotknięciu
źródło