¿Cómo hacer una lista de Controller UITableViewViewViewViewView View-Column?
-
29-10-2019 - |
Pregunta
Necesito presentar mi vista de tabla con una lista de dos columnas. Leí algunas publicaciones relacionadas sobre cómo hacer una cuadrícula anulando el dibujo (aquí). Sin embargo, estoy buscando una manera simple de diseñar mi celda con IB en NIB, luego cargarla y empujar dos celdas en cada fila. El ejemplo con DrawRect no es apropiado porque implica la configuración manual de posiciones. Solo necesito empujar esas dos celdas con algo de autosización, eso es todo. ¿Es posible?
Estoy buscando algo como (en CellforrowatIndExpath):
cell.contentView = emptyUIViewContainer;
[cell.contentView addSubview:FirstColumnUIView];
[cell.contentView addSubview:SecondColumnUIView];
No necesito tener dos puntas separadas para esas dos columnas porque cada columna es del mismo formato solo con algunos otros datos. ¿Algunas ideas?
Actualización: Intuitivamente, estoy tratando de hacer algo como esto:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell1 == nil) {
cell1 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the first cell.
cell1.textLabel.text = ...some text
// Configure the second cell
UITableViewCell *cell2 = [[UITableViewCell alloc] init];
cell2.textLabel.text = ...some text
//set row as container for two cells
UITableViewCell *twoColumnRowView = [[UIView alloc] init]; //initWithFrame:CGRectMake(0, 0, 200, 20)];
cell1.contentView.frame = CGRectMake(0, 0, 100, 20);
[twoColumnRowView addSubview:cell1];
cell2.contentView.frame = CGRectMake(100, 0, 100, 20);
[twoColumnRowView addSubview:cell2];
return twoColumnRowView; // cell;
}
Es solo un prototipo en bruto con el que estoy jugando ahora. Pero el código se bloquea en tiempo de ejecución con la "aplicación de terminación debido a la excepción no captura 'nsinvalidarGumentException', razon: '-[UIView SettableViewStyle:]: Selector no reconocido enviado a instancia"
Actualización 2. He cambiado un código para ver más práctico. Extraño, pero después de varios intentos, hice que la aplicación funcionara sin bloqueo, pero con un extraño fondo negro en todas las celdas. Aquí está el código:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *FirstCellIdentifier = @"FirstCellIdentifier";
static NSString *SecondCellIdentifier = @"SecondCellIdentifier";
// initialize first cell
UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:FirstCellIdentifier];
if (cell1 == nil) {
cell1 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:FirstCellIdentifier] autorelease];
}
//initialize second cell
UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:SecondCellIdentifier];
if (cell2 == nil) {
cell2 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SecondCellIdentifier] autorelease];
}
cell1.textLabel.text = ...data
cell2.textLabel.text = ...data
UITableViewCell *twoColumnRowView = [[UITableViewCell alloc] init];
[twoColumnRowView addSubview:cell1];
//cell2.contentView.frame = CGRectMake(100, 0, 100, 20);
[twoColumnRowView addSubview:cell2];
return twoColumnRowView; // cell;
}
No estoy reutilizando TwocolumnRowView, pero ambos sí.
Solución
No puede (o al menos no debe) poner dos vistas de mesa una al lado de la otra. Y, como ya sabe, una vista de tabla solo tiene una sola columna.
Sin embargo, puede poner tantos datos como desee en cada celda.
Puedes hacer la mayor parte de esto en Interface Builder. Crear un xib con un UITableViewCell
. Arrastra y deja caer un par de UILabel
s en el lugar correcto. Puede actualizar las etiquetas encontrándolas con el viewWithTag:
método, pero sería mejor crear una personalización UITableViewCell
clase con propiedades que apuntan a cada etiqueta.
Dado que las tablas son tan centrales para UIKIT, hay muchas muestras en el conjunto de documentación de Apple y algunas buenas charlas del WWDC. Puede descargar los videos de iTunes.
Otros consejos
Espero que esto te ayudará...
De lo contrario, la mejor manera es poner dos vistas de mesa una al lado de la otra, si necesitan desplazarse de forma independiente.
Espero que esto te ayudará...