Quiero saber si está permitido el uso múltiple UItableView
en la misma vista (no veo cualquier cosa en el Apple's Human Interface Guidelines) y si está bien, cómo cargar diferentes DataSource
en viewDidLoad
para cada UITableView
?Dos UITableView en la misma vista
Respuesta
Sí, puedes. El problema es que cada UITableView
usará el mismo UITableViewDataSource
y UITableViewDelegate
. Por lo tanto, debe determinar con qué tabla de trabajo está trabajando en cada uno de los métodos delegados 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;
}
}
Usted puede sin duda tener múltiples vistas de tabla. Usted quiere asegurarse de que mantener un puntero en torno a cada uno, y luego en sus métodos de fuente de datos, usted haría algo como esto:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if(tableView == tableViewOne)
return 5;
else //if (tableView == tableViewTwo)
return 3;
}
Este sería el mismo para todos los métodos de delegado/fuente de datos, los cuales es por eso que le dan qué tabla de vista como un parámetro.
Para hacer la vida más fácil, puede pasar dos delegados diferentes a UITableView. Si pasa al mismo delegado, tendrá que hacer muchas declaraciones if. Al crear dos delegados diferentes, permitirá que su código sea mucho más limpio.
Sin embargo, a menudo no es la mejor práctica, ya que tendría que tener varias clases para hacer esto. El código debe colocarse donde tiene más sentido colocarlo, no donde guardará la escritura del programador. – Christian
@Christian, poner el código en otra clase no guarda la escritura. El código de separación se llama ** Encapsulación **. –
IMO la solución más limpia sería tener un controlador para cada vista de tabla.
Si utiliza un controlador para n tableview, tendrá que utilizar si-operadoras en muchos lugares, en
– numberOfSectionsInTableView:
– tableView:numberOfRowsInSection:
– tableView:titleForHeaderInSection:
- ...
Básicamente en todo UITableViewDatasource-Prot métodos de ocol que deberá implementar.
Así que si necesita cambiar algo, tiene que cambiarlo en muchos lugares.
Si utiliza una clase de controlador para una vista de tabla, no tendrá que comprobar en absoluto.
- escribir una clase controlador para cada tableview, que sea conforme con el protocolo de
UITableViewDatasource
- poner en práctica los métodos de protocolo que va a necesitar.al menos
– numberOfSectionsInTableView:
,– tableView:numberOfRowsInSection:
,– tableView:cellForRowAtIndexPath:
- poner en práctica los métodos de protocolo que va a necesitar.al menos
- llamada
-setDataSource:
para cada tableview a un objeto de la clase del controlador derecho
escribí un ejemplo código: 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;
}
Gran admirador de este método. Mucho más limpio y más organizado. –
No hay necesidad de invocar controladores de vista adicionales y cargar nuevas vistas. Puede crear 2 clases que adopten el
Puede configurar la etiqueta para cada tabla. A continuación, aplicar en esa condición en el método delegado tableview, 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;
}
- 1. ¿Cómo cargar dos matrices en la misma tabla vista?
- 2. iPad - Más de una UITableView en la misma pantalla
- 3. UITableView en UIScrollView: cómo hacer que la vista se desplace, pero no TableView en sí misma?
- 4. Múltiples UIAlertViews en la misma vista
- 5. Asignar diferentes URL a la misma vista
- 6. Dos ValidationSummary en la misma página
- 7. Inicializar dos variables en la misma línea
- 8. dividir dos veces en la misma expresión?
- 9. Separación de dos formularios en la misma vista en ASP.Net MVC
- 10. Poner una vista personalizada en un UITableView
- 11. Vista flotante sobre UITableView en RootViewController
- 12. Django Admin: ¿cómo mostrar los campos de dos modelos diferentes en la misma vista?
- 13. cómo usar más de dos UITableView en controlador de vista única en iphone
- 14. Ordenar dos matrices de la misma manera
- 15. UIView: Cómo comprobar si los toques terminaron dentro de la misma vista en la que comenzaron
- 16. Dos formularios comparten la misma entrada
- 17. ¿Cómo usar dos Formularios Django diferentes en la misma plantilla?
- 18. Cómo poner dos botones en la misma línea en Android
- 19. Plugin de Will_paginate en dos objetos en la misma página
- 20. misma función para dos botones en jQuery
- 21. Clasificación y filtrado de CouchDB en la misma vista
- 22. ASP.NET MVC LISTA y crear en la misma vista
- 23. RenderPartial control en la misma carpeta de vista
- 24. método delegado UITableView llamado dos veces
- 25. UITableView reloadSections/reloadData: la vista de encabezado se vuelve vacía
- 26. Utilice dos UIViewAnimationCurves diferentes en la misma animación
- 27. ¿Es posible contar con dos columnas en la misma consulta
- 28. Cómo definir dos relaciones a la misma mesa en SQLAlchemy
- 29. poner dos de entrada de texto en la misma línea
- 30. ¿Es posible tener dos contextos WebGL en la misma página?
Prueba este donde se busque código de ejemplo con plena explicación de 2 enfoques diferentes para hacer esto: Véase mi respuesta en http://stackoverflow.com/a/11789681/846372 – Soniya