uitableviewcontroller tutorial custom cellforrowat objective-c ios cocoa-touch uitableview

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.

  1. escriba una clase de controlador para cada vista de tabla, haga que UITableViewDatasource protocolo UITableViewDatasource
    • Implemente los métodos de protocolo que necesitará. al menos
      • – numberOfSectionsInTableView:
      • – tableView:numberOfRowsInSection:
      • – tableView:cellForRowAtIndexPath:
  2. 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.