2012-05-09 22 views
17

¿Cómo puedo hacer lo siguiente en una UIViewController (que contiene un tableview como subvista)Cómo incrustar un UITableView en una UIScrollView

inicialmente tienen una UIViewController que muestra una sección de vista previa (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]; 

también he añadido un UITableView (y una barra de búsqueda) por debajo de

//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 esta configuración, mi área de desplazamiento es pequeño (sólo área estática por debajo de la sección de vista previa)

¿Cómo puedo modificar mi código de tal manera que 1) que puede desplazarse a toda la página hacia arriba es decir, la sección de vista previa y tableview se desplazarán juntos 2) Desplazamiento en su conjunto se detendrá cuando la barra de búsquedas llega a la parte superior (por debajo de barra de navegación) (ver captura de pantalla), pero el contenido de la UITableView sigue siendo desplazable

enter image description here

EDIT:

Código agregado para la vista UIScroll. Sin embargo, nada ha cambiado para mí. ¿Qué pasa con mi código?

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

Respuesta

33

tengo una solución para usted,

uso exclusivo tableView es suficiente

  1. hacen que la "Vista previa de Vista", como el HeaderView de su tableView

  2. hacer que la "barra de búsqueda" como la vista de encabezado de sección de su tablaVer

se puede hacer perfectamente :)

+3

Esto solo funciona para una vista de tabla con una sección. – SAHM

+1

¿Puede algún cuerpo explicarme algo más? Por favor – RaviJSS

1

Tendrá que integrar su UITableView en el interior de un UIScrollView que tiene el tamaño de la pantalla, menos la barra de navegación. Establezca el fondo UIScrollViews en clearColor para permitir que su contenido encima de UITableView permanezca visible.

+0

Hola, gracias por su respuesta. Agregué un código para la vista de UIScroll pero no funcionó para mí, es decir, nada cambió desde mi implementación original. ¿Me puede ayudar a echar un vistazo a mi pregunta editada? Agregué mi código de uiscrollview allí. Gracias de antemano – Zhen

+0

Deberías ir con la solución de DBD/adali, es mejor que la mía :) –

3

No hay necesidad de ningún procedimiento especial o personalizado, utilice un UITableView y establecer su panel de vista previa a ser el campo de búsqueda de su tableHeaderView y ser el encabezado de sección usando tableView:viewForHeaderInSection: en su UITableViewDelegate.

El encabezado de la tabla se desplazará por la parte superior durante el evento de desplazamiento. Los encabezados de sección flotan y permanecen visibles todo el tiempo en esa sección si es visible. Si solo tiene 1 sección, el encabezado de la sección estará allí todo el tiempo.

0

Sí, puede usar "tableView: viewForHeaderInSection".

2

O simplemente puede seguir estos pasos: 1. Deshabilite el desplazamiento de tableView. 2. Establezca la restricción de altura en tableView y una IBOutlet conectada a ella. 3. Antes de volver a cargar los datos, calcule la altura de la tabla.heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

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

No puede desplazarse debido contentSize no es lo suficientemente grande. Debe aumentar la longitud total de su contenido que se encuentra en la parte superior de scrollView.

Cuestiones relacionadas