Mam UIView, który obejmuje wszystkie UITableView. UIView używa rozpoznawania gestów do kontroli tego, co wyświetla tabela. Nadal potrzebuję przewijania w pionie UITableView i wciskania wierszy. Jak przekazać te informacje do tabeli za pomocą narzędzi do rozpoznawania gestów?Gest Recognizers i TableView
Odpowiedz
Przypisanie gest do widoku tabeli i tabela zajmie się nim:
UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSwipeFrom:)];
[gesture setDirection:
(UISwipeGestureRecognizerDirectionLeft
|UISwipeGestureRecognizerDirectionRight)];
[tableView addGestureRecognizer:gesture];
[gesture release];
Następnie w swoim sposobie działania gest, działają w oparciu o kierunek:
- (void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
[self moveLeftColumnButtonPressed:nil];
}
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
[self moveRightColumnButtonPressed:nil];
}
}
tabela będzie przekazać tylko te gesty, o które prosiłeś, po ich wewnętrznym użyciu.
To jest świetną odpowiedzią. Ale czy możesz mi powiedzieć, jak poznać tableview indexPath w handleSwipeFrom? – dinesh
To nie zadziała - właściwość kierunku na UISwipeGestureRecognizer wskazuje, jakie kierunki MOŻNA rozpoznać (w tym przypadku lewo i prawo), nie w którym kierunku został przesunięty. Konieczne będzie oddzielne rozpoznawanie gestów. –
Tak, rozpoznawanie.direct zawsze będzie 3 i nigdy nie będzie zgodne. Jest to prawdopodobnie błąd: http://stackoverflow.com/questions/3319209/setting-direction-for-uiswipegesturerecognizer – Symmetric
Jeśli trzeba znać swoje komórki indexPath:
- (void)handleSwipeFrom:(UIGestureRecognizer *)recognizer {
CGPoint swipeLocation = [recognizer locationInView:self.tableView];
NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation];
UITableViewCell *swipedCell = [self.tableView cellForRowAtIndexPath:swipedIndexPath];
}
To był wcześniej odpowiedział UIGestureRecognizer and UITableViewCell issue.
Próbowałem sugestii Rob Bonner i działa świetnie. Dziękuję Ci.
Ale w moim przypadku wystąpił problem z rozpoznawaniem kierunku. (Directioner.direction zawsze odsyłają 3) Używam SDK IOS5 i Xcode 4.
Wydaje się, że jest spowodowane "[gest setDirection: (left | right)]" Myślę. (ponieważ wynik predefiniowany (dir left | dir right) jest równy 3)
Tak więc, jeśli ktoś ma problem, taki jak ja, i chce rozpoznać przesunięcie w lewo i prawo, a następnie przypisać dwa elementy rozpoznawcze do widoku tabeli z różnymi kierunkami.
Jak to:
UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleSwipeLeft:)];
[swipeLeftGesture setDirection: UISwipeGestureRecognizerDirectionLeft];
UISwipeGestureRecognizer *swipeRightGesture = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleSwipeRight:)];
[swipeRightGesture setDirection: UISwipeGestureRecognizerDirectionRight];
[tableView addGestureRecognizer:swipeLeftGesture];
[tableView addGestureRecognizer:swipeRightGesture];
i działanie gest poniżej:
- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)recognizer {
[self moveLeftColumnButtonPressed:nil];
}
- (void)handleSwipeRight:(UISwipeGestureRecognizer *)recognizer {
[self moveRightColumnButtonPressed:nil];
}
I kodowane z funkcją ARC a następnie, jeśli nie korzystasz z ARC, dodaj kody uwalnianiu.
PS: Mój angielski nie jest tak dobry, więc jeśli jest jakaś zdaniowa błędu, korekta będzie bardzo zadowolony :)
wierzę „[gest tablView]” powinno być „[yourTableView addGestureRecognizer: gest]” –