2012-05-09 4 views
17

Comment puis-je faire ce qui suit dans un UIViewController (contenant un tableview comme sous-vue)Comment intégrer une UITableView dans un UIScrollView

J'ai d'abord un UIViewController montrant une section d'aperçu (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]; 

J'ai aussi ajouté un UITableView (et un searchbar) ci-dessous

//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

Avec cette configuration, ma zone de défilement est faible (seule zone statique ci-dessous section aperçu)

Comment puis-je modifier mon code tel que 1) je peux faire défiler toute la page vers le haut-à-dire la section d'aperçu et tableview défileront tous ensemble 2) Scrolling dans son ensemble s'arrête lorsque la barre de recherche atteint le sommet (ci-dessous navbar) (voir capture d'écran), mais le contenu du UITableView est encore scrollable

enter image description here

EDIT:

Code ajouté pour la vue UIScroll. Cependant, rien n'a changé pour moi. Quel est le problème avec mon code?

//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]; 

Répondre

33

j'ai une solution pour vous,

utilisation seulement tableView est assez

  1. faire la "Preview View" comme HeaderView de votre tableView

  2. faire le "la barre de recherche" comme l'en-tête de la section Vue de votre tableVoir

vous pouvez faire parfaitement :)

+3

Cela ne fonctionne que pour une tableView avec une section. – SAHM

+1

Quelqu'un peut-il expliquer plus pour moi? S'il vous plaît – RaviJSS

1

Vous devrez intégrer votre UITableView à l'intérieur d'un UIScrollView qui a la taille de l'écran moins la barre de navigation. Définissez l'arrière-plan UIScrollViews sur clearColor pour autoriser votre contenu au-dessus de UITableView à rester visible.

+0

Salut, merci pour votre réponse. J'ai ajouté du code pour la vue UIScroll mais cela n'a pas fonctionné pour moi, c'est-à-dire que rien n'a changé depuis mon implémentation originale. Pouvez-vous m'aider à jeter un coup d'oeil à ma question éditée? J'ai ajouté mon code uiscrollview là-bas. Merci d'avance – Zhen

+0

Vous devriez vraiment aller avec la solution de DBD/adali, c'est mieux que le mien :) –

3

Pas besoin de quoi que ce soit de fantaisie ou de la coutume, utilisez un UITableView et réglez votre panneau de prévisualisation pour être le tableHeaderView et votre champ de recherche pour la tête de la section à l'aide tableView:viewForHeaderInSection: dans votre UITableViewDelegate.

L'en-tête du tableau défile vers le haut pendant l'événement de défilement. Les en-têtes de section flottent et restent visibles tout le temps que cette section est visible. Si vous avez seulement 1 section, alors l'en-tête de section sera là tout le temps.

0

Oui, vous pouvez utiliser "tableView: viewForHeaderInSection".

2

Ou vous pouvez simplement faire ces étapes: 1. Désactiver le défilement de la tableView. 2. Définissez la contrainte de hauteur sur la tableView et une IBOutlet connectée à celle-ci. 3. Avant de recharger les données, calculez la hauteur de la table.heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

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

Il ne peut pas défiler parce que contentSize est pas assez grand. Vous devez augmenter la longueur de la longueur totale de votre contenu qui se trouve au-dessus du scrollView.

Questions connexes