objective c - tutorial - Dos UITableView en la misma vista
uitableview tutorial swift 4 (6)
En mi opinión, la solución más limpia sería tener un controlador para cada vista de tabla.
Si usa un controlador para n tableview, tendrá que usar if-statemenst en muchos lugares, en
-
– numberOfSectionsInTableView:
-
– tableView:numberOfRowsInSection:
-
– tableView:titleForHeaderInSection:
- ...
Básicamente, en todos los métodos del Protocolo UITableViewDatasource que deberá implementar.
Entonces, si necesita cambiar algo, tiene que cambiarlo en muchos lugares.
Si usa una clase de controlador para una vista de tabla, no tendrá que verificar nada.
- escriba una clase de controlador para cada vista de tabla, haga que
UITableViewDatasource
protocoloUITableViewDatasource
- Implemente los métodos de protocolo que necesitará. al menos
-
– numberOfSectionsInTableView:
-
– tableView:numberOfRowsInSection:
-
– tableView:cellForRowAtIndexPath:
-
- Implemente los métodos de protocolo que necesitará. al menos
- call
-setDataSource:
para cada vista de tabla a un objeto de la clase de controlador correcta
Escribí un código de ejemplo: https://github.com/vikingosegundo/my-programming-examples/tree/master/TwoTableViews
TwoTableViewsViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
if (firstController == nil) {
firstController = [[FirstTVContoller alloc] init];
}
if (secondController == nil) {
secondController = [[SecondTVController alloc] init];
}
[firstTable setDataSource:firstController];
[secondTable setDataSource:secondController];
[firstTable setDelegate:firstController];
[secondTable setDelegate:secondController];
firstController.view = firstController.tableView;
secondController.view = secondController.tableView;
}
Quiero saber si está permitido usar Múltiples UItableView
en la misma Vista (no veo nada en las Directrices de Interfaz Humana de Apple ) y si está bien, ¿Cómo cargar diferentes DataSource
en viewDidLoad
para cada UITableView
?
Para hacer la vida más fácil, puede pasar dos delegados diferentes a la UITableView. Si pasa en el mismo delegado, tendrá que hacer muchas declaraciones if. Al crear dos delegados diferentes, permitirá que su código sea mucho más limpio.
Puede establecer la etiqueta para cada tabla. Luego aplique en esa condición en el método delegado de vista de tabla, por ejemplo:
myTable.tag=12;
Puede tener varias vistas de tabla en una sola vista. Agregue etiquetas a cada vista de tabla y con el uso de tableview.tag puede cargar datos en las vistas de tabla por separado.
Ejemplo:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView.tag == x) {
//code to load table view with tag value x
}
else{
//code to load second table
}
return cell;
}
Sí tu puedes. El problema es que cada UITableView
usará el mismo UITableViewDataSource
y UITableViewDelegate
. Por lo tanto, debe determinar con qué vista de tabla está trabajando en cada uno de los métodos de delegado necesarios.
Por ejemplo:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// make bigger rows
if (tableView == myBigRowTableView)
{
// make bigger rows
return 127;
} else if (tableView == mySmallRowTableView) {
// make smaller rows
return 20;
} else {
return 30;
}
}
Sin duda, puede tener varias vistas de tabla. Usted querrá asegurarse de mantener un puntero alrededor de cada uno, luego, en sus métodos de fuente de datos, haría algo como esto:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if(tableView == tableViewOne)
return 5;
else //if (tableView == tableViewTwo)
return 3;
}
Esto sería lo mismo para todos los métodos de fuente de datos / delegado, por lo que le dan qué vista de tabla como parámetro.