2014-11-17 10 views
13

Mam kontroler widok z tej hierarchii:przodu pionowych zwojów z UIScrollView do rodzeństwa UITableView

widok kontrolera:

  • UIScrollView (Przesuwne poziomie)
  • UITableView (Przesuwne pionowo)

enter image description here

Chcę przesłać pionowe zwoje z mojego UIScrollView do rodzeństwa UITableView, tak, że gdy użytkownik przewinie w górę na UIScrollView, zamiast tego przewinie się do góry. Jaki byłby najlepszy sposób na zrobienie tego?

Próbowałem te:

  • Wykrywanie przewijania pionowego w scrollViewDidScroll, nie sprawdzony ponieważ contentOffset zdania przewijania nie zmienia.
  • Podklasy UIScrollView i przesłonięcie touchesMoved, nie mogę przesłać dotyka do widoku tabeli, ponieważ nie mam odniesienia do niego w tej klasie.
+2

Można to zrobić poprzez stworzenie przejrzystego widok na góry i używając go Scrollview uchwycić gesty. Przechodź przez pionowe gesty; przechwytywać poziome gesty i przekazywać je do tableView. Kluczowym elementem jest nadpisanie metody hitTest: withEvent w widoku przezroczystym. (Jeśli to nie wystarczy, daj znać, a ja opublikuję odpowiedź. :-) –

Odpowiedz

3

Jeśli widok tabeli znajduje się w widoku przewijania, uważam, że można skonfigurować rozpoznawanie gestów widoku przewijania tak, aby odpowiadała tylko w przypadku niepowodzenia rozpoznawania gestów widoku tabeli. Nie miałem okazji wypróbować tego, ale powinieneś być w stanie ustawić zależność między gestami dla każdego z widoków.

UITableView* tableView = ...; 
UIScrollView* scrollView = ...; 
for (UIGestureRecognizer* r in scrollView.gestureRecognizers) 
{ 
    for (UIGestureRecognizer* tableRecognizer in tableView.gestureRecognizers) 
    { 
     [r requireGestureRecognizerToFail:tableRecognizer]; 
    } 
} 
3

To sprawi, że zwój równocześnie z UITableView i UIScrollView i zastosować @Stephen Johnson „s blok

- (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 
+0

czy możesz jeszcze trochę rozwinąć? Nie mogę tego zmusić do działania. Dzięki! – McDJ

+0

Czy mógłbyś wyjaśnić więcej? Nie mogę ustawić 'self' jako delegata' UIScrollViewGestureRecognizer'! –