2015-04-16 11 views
6

Mam UICollectionView, w którym przejąłem hitTest: withEvent: w moich komórkach UICollectionViewCell, aby umożliwić stuknięciom znajdującym się poza komórkami zarejestrowanie się jako stuknięcia w komórki.Zadzwoń do didHighlightItemAtIndexPath bez wywołania metody didSelectItemAtIndexPath dla UICollectionView

Kiedy to zrobię i stukam na zewnątrz komórek, które teraz rejestruję jako trafienia, otrzymuję wywołania do didHighlightItemAtIndexPath i didUnhighlightItemAtIndexPath, ale nie otrzymuję połączenia z didSelectItemAtIndexPath. Jeśli stuknę w komórce, otrzymam wszystkie oczekiwane wyróżnienia i wybrane wywołania przedmiotów, tak jak wcześniej.

Nie mam skonfigurowanych niestandardowych narzędzi do rozpoznawania gestów i nie zastępuję dotykówBegan ani niczego w tym stylu.

Czy ktoś wie, na jakich warunkach można uzyskać wywołanie didHighlightItemAtIndexPath bez wywołania metody didSelectItemAtIndexPath? Czy jest jakiś sposób, aby wywołać mój didSelectItemAtIndexPath? Dzięki.

EDIT

Zapomniałem wspomnieć, że moja UICollectionView jest w Today Widget, więc jest on zawarty w Centrum powiadomień widoku przewijania. Jeśli przeniesię wybrany kod do didUnhighlightItemAtIndexPath, zostanie on wywołany po dotknięciu poza komórką, ale wynikiem jest to, że nie można faktycznie przewinąć Centrum powiadomień bez wybrania jednej z komórek.

Więc może różnica między podświetlaniem i zaznaczaniem, które tu widzę, ma coś wspólnego z odpowiedzią widoku przewijania, skasującą zaznaczenie poza komórką?

+1

Zamiast przesłonić 'hitTest: withEvent:', spróbuj przesłonić ['pointInside: withEvent:'] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html# // apple_ref/occ/instm/UIView/pointInside: withEvent :). Czy to działa lepiej? Domyślna implementacja 'hitTest: withEvent:' używa 'pointInside: withEvent:', ale być może 'UICollectionView' również używa' pointInside: withEvent: 'bezpośrednio. –

+0

Właściwie to przesłoniłem punktualnie: zEvent: również do wdrożenia tego. Jest tylko raz wywoływana z hitTest: withEvent :. –

Odpowiedz

1

OK, zorientowałem się, co się dzieje.

Dodałem nowy UITapGestureRecognizer do mojego UICollectionView. Wdrożenie go jak to doprowadziło mnie rozwiązanie:

- (void)cellSingleTap:(UITapGestureRecognizer *)sender 
{ 
    CGPoint point = [sender locationInView:collectionView_]; 
    NSIndexPath *indexPath = [collectionView_ indexPathForItemAtPoint:point]; 
    [ .... ] 
} 

Kiedy zaznaczone punkty zwracany, gdy mam podkreślając jednak nie wybór, to okazało się, że to się stało, gdy punkt zapukał był ciągu wypustkami odcinek kolekcji zobacz układ. A gdy dotknięcia były na wstawkach sekcji, wywołania indexPathForItemAtPoint zwróciły zero.

Po prostu widok kolekcji podświetli, ale nie zaznaczy, stuknięcia znajdujące się poza komórkami, ale znajdują się w jego wypustkach. Tak długo, jak dotknięcia znajdują się poza komórkami, a nie wewnątrz wstawek, te dotknięcia będą powodować wywołania metody didSelectItemAtIndexPath.

Ponieważ chciałbym, aby kliknięcia w wstawkach były liczone jako stuknięcia w komórki, udało mi się obejść ten problem, dostosowując punkty zaczepienia przed wywołaniem do indexPathForItemAtPoint.

Powiązane problemy