2013-07-31 13 views
8

Mam UIScrollView (z stronicowania), do którego dodaję trzy UIViews. Każdy z tych UIViews ma wewnątrz UITableView. Tak więc użytkownik powinien mieć możliwość przewijania w poziomie do żądanej strony, a następnie przewijania w pionie w odpowiedniej tabeli.UITableView Problemy z przewijaniem, gdy wewnątrz UIScrollView

Jednak niektóre tabele nie otrzymują gestów przewijania. Zazwyczaj pierwszy zachowuje się dobrze, ale inni nie. Nie mogę wybrać komórek ani przewijać tabeli w górę lub w dół.

użyłem ustawienia domyślne dla UIScrollView, z wyjątkiem tych określonych w tych viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //Load the view controllers 
    [self loadViewControllers]; 

    //Configure the scroll view 
    self.scrollView.pagingEnabled = YES; 
    self.scrollView.contentSize = CGSizeMake(CGRectGetWidth(self.scrollView.frame) * viewControllers.count, CGRectGetHeight(self.scrollView.frame)); 
    self.scrollView.showsHorizontalScrollIndicator = NO; 
    self.scrollView.showsVerticalScrollIndicator = NO; 
    self.scrollView.scrollsToTop = NO; 
    self.scrollView.delegate = self; 

    //Configure the page control 
    self.pageControl.numberOfPages = viewControllers.count; 
    self.pageControl.currentPage = 0; 
} 

Nie mogę zrozumieć, dlaczego nie mogę przewijać niektórych stołach ... Każda pomoc Byłbym bardzo doceniony.

Z góry dzięki!

Odpowiedz

2

miejsca chciałbym sprawdzić:

  1. Sprawdź Państwa zdanie hierarchie - Czy coś jest nakładana na górze UITableView, co powoduje, że nie chce otrzymywać kranu?
  2. Czy Twoje widoki UITableView są wyłączone w dowolnym miejscu? Ustawiłbym punkt przerwania w tableView:didSelectRowAtIndexPath: i zobacz, czy ta metoda jest wywoływana.
  3. Sprawdź this post

Chyba to nie są odpowiedzi najpewniejszy, ale mam nadzieję, że pomoże odkryć problem!

+0

Hmm, nie mam żadnych innych widoków.Hierarchia jest obecnie mniej więcej tak: UIView - UIScrollView --- UIView ----- UITableView Jednak ma pan rację ... tableView: didSelectRowAtIndexPath nie jest wywoływana podczas „próby” przewijania. Ale nie wyłączam tego (przynajmniej celowo). Każdy pomysł, dlaczego stałby się wyłączony? – Sagito

+0

Czy wywoływane są metody delegatów/źródeł danych dla twoich widoków UITableViews? – hgwhittle

+1

Tak, mam UIViewController dla każdego UITableView, który jest zarówno delegat i źródło danych tabel. – Sagito

4

Spróbuj ustawić

self.scrollView.delaysContentTouches = YES; 
self.scrollView.canCancelContentTouches = NO; 

Może UIScrollView nie przechodzą informacje dotykowe do subviews.

+0

Próbowałem tego rozwiązania przez budowanie interfejsu, ale nie działało. Czy powinienem to zrobić w kodzie, czy jest to to samo? – Sagito

4

Próbowałem odtworzyć uproszczoną wersję Twoich potrzeb, używając w zasadzie Kreatora interfejsu i wydaje mi się, że działa on przy użyciu podstawowego kodowania i przy użyciu domyślnych ustawień. Czy możesz sprawdzić moje szybkie i brudne repozytorium Github i proszę o odpowiedź, czy ma to zastosowanie do twojej sytuacji lub czego brakuje.

https://github.com/codedad/SO_ScrollView_with_Tables

Przez domyślny interfejs Builder tworzy UIScrollView i UITableViews umożliwiając:

  • Opóźnienia Touches treści w
  • odwoływalny Touches treści w
+0

Dzięki! Spróbuję tego i skontaktuję się z Tobą! :-) – Sagito

+0

Nie użyłem w moim przykładzie oddzielnych kontrolerów widoku dla wszystkich tabel, ponieważ jeden kontroler widoku działający jako źródło danych dla wszystkich tabel jest wystarczający, ponieważ możesz użyć parametru 'tableView' zarówno w komórceForRowAtIndexPath, jak i numberOfRowsInSection, aby rozróżnić różne tabele. – nzs

+0

Wygląda na to, że zarówno ty, jak i @ hw731 byliście poprawni, ponieważ w twoim przykładzie i w linku zamieszczonym przez hw371 różnica była w rozmiarze UITableView. Moje tabele były o kilka pikseli za duże, podczas gdy w twoim przykładzie pasowały one poprawnie i wydawało się, że jest to problem z moim kodem. :-) Dziękuję bardzo! – Sagito

0

ten pracował dla mnie

Programuję sojusz dodał tabelę widoku do mojego widoku przewijania, potrzebna jest funkcja addSubview:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 

    if ([touch.view isDescendantOfView:self.signUpJammerList]) { 

     return NO; 
    } 
    return YES; 
} 
Powiązane problemy