2013-07-31 14 views
8

Ho un UIScrollView (con paging) a cui aggiungo tre UIViews. Ciascuno di questi UIViews ha un UITableView all'interno. Quindi, l'utente dovrebbe essere in grado di scorrere orizzontalmente alla pagina che desidera e quindi scorrere verticalmente nella tabella corrispondente.UITableView problemi di scorrimento quando all'interno di un UIScrollView

Tuttavia, alcune delle tabelle non ricevono i movimenti di scorrimento. Di solito il primo si comporta bene, ma gli altri no. Non riesco a selezionare le celle né a scorrere il tavolo verso l'alto o verso il basso.

Ho usato le impostazioni predefinite per l'UIScrollView, ad eccezione di questi definiti nel 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; 
} 

io non riesco a capire il motivo per cui non riesco a scorrere alcune delle tabelle ... Qualsiasi aiuto sarebbe molto apprezzato

Grazie in anticipo!

risposta

2

cose che vorrei verificare:

  1. Controlla la tua vista gerarchie - è qualcosa di essere licenziati in cima alla vostra UITableView, causando non ricevere un rubinetto?
  2. Le tue UITableViews sono disabilitate ovunque? Definirei un punto di interruzione in tableView:didSelectRowAtIndexPath: e verificare se il metodo viene chiamato.
  3. check this post

Credo che quelli non sono risposte infallibili ma speriamo che ti aiuto a scoprire il problema!

+0

Hmm, non ho altre visualizzazioni.La gerarchia è attualmente qualcosa di simile: UIView - UIScrollView --- UIView ----- UITableView Tuttavia, lei ha perfettamente ragione ... tableView: didSelectRowAtIndexPath non viene chiamato durante il rotolo "tentato". Ma non lo sto disabilitando (almeno intenzionalmente). Qualche idea sul perché sarebbe diventata disabilitata? – Sagito

+0

Sono stati chiamati metodi delegati/origine dati per UITableViews? – hgwhittle

+1

Sì, ho un UIViewController per ogni UITableView che è sia delegato che origine dati delle tabelle. – Sagito

4

tenta di impostare

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

Forse l'UIScrollView do not pass informazioni tattili ai subviews.

+0

Ho provato questa soluzione tramite il generatore di interfaccia ma non ha funzionato. Dovrei farlo in codice o è lo stesso? – Sagito

4

Ho provato a riprodurre una versione semplificata delle vostre esigenze utilizzando fondamentalmente Interface Builder e mi sembra che funzioni utilizzando la codifica di base e utilizzando le impostazioni predefinite. Puoi controllare il mio rapido e sporco repository Github e chiedere gentilmente di rispondere se è applicabile alla tua situazione o cosa manca.

https://github.com/codedad/SO_ScrollView_with_Tables

Per impostazione predefinita Interface Builder crea UIScrollView e UITableViews permettendo:

  • Ritardi Tocchi contenuto di
  • annullabili Tocchi contenuto di
+0

Grazie! Proverò questo e tornerò da te! :-) – Sagito

+0

Non ho usato nel mio esempio i controller di vista separati per tutte le tabelle poiché un controller di visualizzazione che funge da origine dati per tutte le tabelle è sufficiente in quanto è possibile utilizzare il parametro "tableView" sia in cellForRowAtIndexPath che numberOfRowsInSection per distinguere le varie tabelle. – nzs

+0

Beh, sembra che sia tu che @ hw731 fossero corretti perché nel tuo esempio e nel link pubblicato da hw371 la differenza era nella dimensione di UITableView. I miei tavoli erano un paio di pixel troppo grandi mentre nel tuo esempio si adattavano correttamente e questo sembrava essere il problema con il mio codice. :-) Grazie mille! – Sagito

0

Questo ha funzionato per me

I programmatico ha aggiunto la tabellaView alla mia vista di scorrimento usando addSubview:

UIGestureRecognizerDelegate è necessario.

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

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

     return NO; 
    } 
    return YES; 
} 
Problemi correlati