Z podobnym problemem do this question, próbuję dodać kreator dwukrotnego dotknięcia do instancji UICollectionView
.Dodaj podwójne dotknięcie do UICollectionView; wymagać pojedynczego dotknięcia, aby zakończyć się niepowodzeniem
Potrzebuję zapobiec domyślnemu pojedynczemu dotknięciu wywoływania metody UICollectionViewDelegate
collectionView:didSelectItemAtIndexPath:
.
W celu osiągnięcia tego zaimplementować kod straight from Apple's Collection View Programming Guide (Listing 4-2):
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; NSArray* recognizers = [self.collectionView gestureRecognizers]; // Make the default gesture recognizer wait until the custom one fails. for (UIGestureRecognizer* aRecognizer in recognizers) { if ([aRecognizer isKindOfClass:[UITapGestureRecognizer class]]) [aRecognizer requireGestureRecognizerToFail:tapGesture]; } // Now add the gesture recognizer to the collection view. tapGesture.numberOfTapsRequired = 2; [self.collectionView addGestureRecognizer:tapGesture];
Ten kod nie działa zgodnie z oczekiwaniami: tapGesture
pożarów na podwójnym kranu ale domyślny pojedynczy kranu nie jest zabroniony, a Metoda delegata didSelect...
jest nadal wywoływana.
Krok po kroku w debugerze ujawnia, że warunek if, [aRecognizer isKindOfClass:[UITapGestureRecognizer class]]
, nigdy nie jest prawdziwy, a zatem nie jest ustalane wymaganie dotyczące awarii w nowym tapGesture
.
Uruchomienie tego debugera polecenia za każdym razem za pomocą pętli for:
po (void)NSLog(@"%@",(NSString *)NSStringFromClass([aRecognizer class]))
pokazuje, że Recognizers domyślny gest są (w rzeczywistości) nie UITapGestureRecognizer
przypadkach.
Zamiast tego są to prywatne klasy UIScrollViewDelayedTouchesBeganGestureRecognizer
i UIScrollViewPanGestureRecognizer
.
Po pierwsze, nie mogę ich używać w sposób jawny, nie łamiąc zasad dotyczących prywatnego interfejsu API. Po drugie, dołączenie do UIScrollViewDelayedTouchesBeganGestureRecognizer
poprzez requireGestureRecognizerToFail:
wydaje się nie zapewniać pożądanego zachowania w każdym razie - to jest nadal wywoływana didSelect...
uczestnika.
Jak mogę pracować z Recognizers domyślny gest UICollectionView
„s dodać dwukrotnie, aby widoku zbiórki i zapobiec domyślny jeden z kranu również wypalanie collectionView:didSelectItemAtIndexPath:
metodę delegata za?
Z góry dzięki!
nie nie realizuje 'CollectionView: didSelectItemAtIndexPath:' wystarczy? – cahn
@cahn: Obawiam się, że nie - potrzebuję podwójnego dotknięcia oprócz standardowego zachowania. –
[To pytanie] (http://stackoverflow.com/questions/12792661/how-to-detect-double-taps-on-cells-in-a-uicollectionview) wydaje się rozwiązać ten sam problem, który masz. Czy to działa? –