2012-05-09 24 views
17

Come posso fare quanto segue in un'UIViewController (contenente un Tableview come una visualizzazione secondaria)Come incorporare un UITableView in un UIScrollView

ho inizialmente hanno un UIViewController mostra una sezione di anteprima (UIView)

//Setup container for preview section 
UIView *tempContainer = [[UIView alloc]initWithFrame:CGRectMake(0, 20, 320, 100)]; 
self.preview_answer_container = tempContainer; 
self.preview_answer_container.backgroundColor = [UIColor clearColor]; 
[tempContainer release]; 
[self.view addSubview:self.preview_answer_container]; 

ho anche aggiunto un UITableView (e una barra di ricerca) sotto

//setup tableview 
UITableView *tempTable = [[UITableView alloc]initWithFrame:CGRectMake(0,44 ,320,self.view.frame.size.height - 44)]; 
self.tagFriendsTableView = tempTable; 
self.tagFriendsTableView.delegate = self; 
self.tagFriendsTableView.dataSource = self; 
[tempTable release]; 

[self.view addSubview:self.tagFriendsTableView]; 

enter image description here

Con questa impostazione, la mia zona di scorrimento è di piccole dimensioni (unica area statica della sezione di anteprima)

Come posso modificare il mio codice in modo tale che 1) Posso scorrere l'intera pagina verso l'alto vale a dire la sezione di anteprima e Tableview scorreranno insieme 2) scorrimento nel suo complesso si fermerà quando la barra di ricerca raggiunge la parte superiore (al di sotto barra di navigazione) (vedi screenshot), ma il contenuto del UITableView è ancora scorrevole

enter image description here

EDIT:

Codice aggiunto per la vista UIScroll. Tuttavia, nulla è cambiato per me. cosa c'è che non va nel mio codice?

//setup scroll view 
UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

//Search 
UISearchBar *tempBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 120 + 20, 320, 44)]; 
self.sBar = tempBar; 
[tempBar release]; 
self.sBar.delegate = self; 
self.sBar.tintColor = [UIColor colorWithHexString:@"#b6c0c7"]; 
self.sBar.placeholder = @"Search for FB and DM friends"; 

[scroll addSubview:sBar]; 

//setup tableview 
UITableView *tempTable = [[UITableView alloc]initWithFrame:CGRectMake(0,144 + 20 + 20 ,320,self.view.frame.size.height - 144 - 20 - 20 - 44)]; 
self.tagFriendsTableView = tempTable; 
self.tagFriendsTableView.delegate = self; 
self.tagFriendsTableView.dataSource = self; 
[tempTable release]; 

//Add the scroll view to the parent view 
[scroll addSubview:self.tagFriendsTableView]; 

scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); 
[self.view addSubview:scroll]; 
[scroll release]; 

risposta

33

ho una soluzione per te,

uso solo tableView è sufficiente

  1. fare il "Preview View" come HeaderView del vostro tableView

  2. fare la "barra di ricerca" come l'intestazione di sezione Visualizza il tuo tavoloView

puoi fare perfettamente :)

+3

Questo funziona solo per un TableView con una sezione. – SAHM

+1

Qualche altra persona può spiegarmi qualcosa per me ?? per favore – RaviJSS

1

Si dovrà incorporare l'UITableView all'interno di un UIScrollView che ha le dimensioni dello schermo meno la barra di navigazione. Imposta lo sfondo di UIScrollViews su clearColor per consentire ai tuoi contenuti sopra UITableView di rimanere visibili.

+0

Ciao, grazie per la tua risposta. Ho aggiunto del codice per la visualizzazione di UIScroll ma non ha funzionato per me, ovvero non è cambiato nulla rispetto all'implementazione originale. Puoi aiutarmi a dare un'occhiata alla mia domanda modificata? Ho aggiunto il mio codice di scansione di YouTube lì. Grazie in anticipo – Zhen

+0

Si dovrebbe effettivamente andare con la soluzione DBD/adali, è meglio del mio :) –

3

Non c'è bisogno di qualcosa di fantasia o personalizzato, utilizzare un UITableView e impostare il riquadro di anteprima per essere il vostro campo di ricerca tableHeaderView e per essere l'intestazione di sezione utilizzando tableView:viewForHeaderInSection: nella tua UITableViewDelegate.

L'intestazione della tabella scorre verso l'alto durante l'evento di scorrimento. Le intestazioni di sezione fluttuano e rimangono visibili per tutto il tempo in cui la sezione è visibile. Se hai solo 1 sezione, l'intestazione della sezione sarà lì per tutto il tempo.

0

Sì, è possibile utilizzare "tableView: viewForHeaderInSection".

2

Oppure è sufficiente eseguire questi passaggi: 1. Disabilitare lo scorrimento del TableView. 2. Impostare il vincolo di altezza su tableView e su IBOutlet ad esso collegato. 3. Prima di ricaricare i dati, calcolare l'altezza del tavolo.heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

0
scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); 

Non può scorrere a causa contentSize non è abbastanza grande. È necessario aumentare la lunghezza alla lunghezza totale del contenuto che si trova in cima a scrollView.

Problemi correlati