ios - uitableviewcell - uitableview with multiple custom cells swift
2 UITableViews en una UIView (5)
Ambos enfoques tienen algunos pros y contras, pero personalmente preferiría tener dos controladores separados.
Enfoque 1: cree un Controlador de vista de tabla y cambie la fuente de datos
- Este enfoque ayuda a evitar el código extra y repetido.
- Con esta gestión de memoria es bueno usar solo un controlador. (Aunque esto no es una gran preocupación hasta entonces, no tendremos mucha información).
- Problema con esto es tener complejidad.
Enfoque 2 - 2 Table View Controller
- Con este enfoque definitivamente tienen código extra y repetido.
- Pero con esto hay menos complejidad.
Tengo una UIView
que necesitará mostrar dos UITableViews, pero nunca se muestran juntas, al usar una SegementedBar
puede alternar una u otra.
¿Cuál sería la mejor manera de manejar esto? Simplemente cree un Table View Controller
y cambie el origen de datos, o cree 2 Table View Controllers
y simplemente oculte uno cuando el otro sea visible.
Las 2 tablas tendrán un diseño completamente diferente con diferentes celdas personalizadas.
En mi aplicación actual, necesito tener 4 UITableView
en un solo UIViewController
, de una vez tengo que mostrar una sola tabla, de acuerdo con la pestaña seleccionada por el usuario, agregué cuatro tablas porque, todas tenían diferentes celdas personalizadas y funcionalidad, para reducir la complejidad, tomé cuatro.
El principal beneficio de esto es que, cada vez que no necesita llamar a reloadData
para actualizar una sola tabla. Solo necesito manejar adecuadamente el flujo show & hide de la tabla. Y créeme, eso se ve genial. Sin parpadear en absoluto.
En mi caso, estoy creando cuatro tablas solo por código. Y hago un método que me devolverá una tabla basada en una etiqueta que he aprobado.
Mantengo cellForRowAtIndexPath
más pequeño posible dividiendo el código en diferentes funciones.
Mantendría una fuente de datos y un delegado.
Esto significa que todos los métodos de delegado / origen de datos se vuelven más complicados, PERO significa que puede conservar la relación uno a uno entre viewController y view.
mantener una referencia a cada una de las vistas de la tabla
//vc.h
@property (nonatomic, weak) IBOutlet UITableView* firstTableView;
@property (nonatomic, weak) IBOutlet UITableView* secondTableView;
En los métodos de fuente de datos / delegado, debe tener en cuenta el hecho de que el método debe comportarse de manera diferente según la vista de tabla que esté en uso. p.ej
//vc.m
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
if (tableView == self.firstTableView) {
...
} else { // tableView == self.secondTableView
...
}
}
return cell;
}
Use UITableViewControllers
separado y cambie las vistas. Es menos código, menos complejidad y es la forma en que Apple lo hace con el TabBar .
En cuanto a la complejidad del código, realmente no hay ninguno. Simplemente haga lo siguiente para cambiar las vistas cuando el UISegmentedControl
del UISegmentedControl
haya cambiado:
UIView *previousSuperview = myViewController1.view.superview;
myViewController2.view.frame = myViewController1.view.frame;
[myViewController1.view removeFromSuperview];
[previousSuperview addSubview:myViewController2.view];
Alternativamente, puede establecer la propiedad hidden
la vista correspondiente.
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
if (tableView.tag == 1) {
...
} else { // tableView == self.secondTableView
...
}
}
la etiqueta se puede asignar desde .xib. así que no es necesario tener la variable UITableVeiw en el archivo .h. Se necesitan dos vistas de tabla en .xib