¿Qué tan mejor implementar UITableView con dos "tabs"?

Ambas tablas deben estar en un controller de vista, conmutando por control de segmento, por ejemplo. Los datos son infinitos, obtenidos de los datos centrales. Veo tres soluciones:

1) crea dos objects de UITableView y los rellena en funciones de UITableView datos compartidas; manteniendo oculta una de las vistas de tabla

2) cree dos contenedores de controller de vista, incruste en el controller de vista principal y realice methods de fuente de datos completamente separados; manteniendo uno de los contenedores ocultos

3) use solo un object de vista de tabla, recargando datos cuando sea necesario, proporcionando ahorro de compensación

Necesita sus opiniones. ¿Qué solución será más rápida y / o más legible y correcta?

Actualizar

Déjame intentar implementar la tercera opción:

 var tableViewOffsets = [Int: CGPoint]() func segmentValueChanged(sender: UISegmentedControl) { tableViewOffsets[tableView.tag] = tableView.contentOffset tableView.tag = sender.selectedSegmentIndex tableView.reloadData() if let savedOffset = tableViewOffsets[tableView.tag] { tableView.setContentOffset(savedOffset, animated: false) } } func tableView_dataSourceMethodsTemplate(tableView: UITableView, ...) { if tableView.tag == 0 { //perform data source code for first tab } else { //perform data source code for second tab } } 

el número de opción third es fácil y la optimization de la memory también es buena, en mi sugerencia, usa la tag Concepto con una tabla única. Si seleccionaste cualquier segmento, asigna la label a la vista de la tabla (ej. yourtableview.tag = 1) y al mismo time cambia el marco necesitas,

Actualizado

 func segmentValueChanged(sender: UISegmentedControl) { tableViewOffsets[tableView.tag] = tableView.contentOffset tableView.tag = sender.selectedSegmentIndex var tablearray = [string]() if sender.selectedSegmentIndex == 0 { // here fecth the value in conetworkingata and append in array tablearray.append (yourdta) }else { // here fecth the value in conetworkingata and append in array tablearray.append (yourdta) } if let savedOffset = tableViewOffsets[tableView.tag] { tableView.setContentOffset(savedOffset, animated: false) } tableView.reloadData() } func tableView_dataSourceMethodsTemplate(tableView: UITableView, ...) { return tablearray.count } 

Puedes optar por la tercera solución . Puede usar UISegmentedControl para que funcione como tabs y, al seleccionar un segmento, puede asignar fuente de datos a la misma tablaView. Esto también networkingucirá el uso de la memory, ya que usará single tableView y se precargará para usar como segunda tablaView.

  1. Debe crear dos arreglos fuente de datos para ambas tabs 2.Vergar tabla de carga cuando la pestaña cambia.
  2. en cellforrowatindexpath necesita manejar los datos que muestran de la matriz de fuente de datos para la pestaña seleccionada.

es decir. Puede manejar ambas tabs con una sola vista de tabla.

Creo que el event handling una vista de tabla con dos arreglos dependiendo del control segmentado es quizás la mejor opción. Yo agregaría un bool que manejará qué índice de segmento es, por ejemplo, isZero. Simplemente cree un UISegmentedControl y una acción para manejar índices. Nota: agregaré el código objective-c, pero creo que reconocerá el concepto.

 -(IBAction)segmentChangeViewValueChanged:(UISegmentedControl *)segmentedControl { if (segmentedControl.selectedSegmentIndex == 0) { self.headerLabel.text = @"Contacts"; self.searchButton.hidden = YES; self.isContactsSegment = YES; self.searchTextField.text = @""; self.refinedContactsSearch = [NSMutableArray arrayWithArray:self.contacts]; [self.contactsTableView reloadData]; } else { self.headerLabel.text = @"Search on server"; self.searchButton.hidden = NO; self.isContactsSegment = NO; self.searchTextField.text = @""; [self.contactsTableView reloadData]; } } cellForRow: -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ContactsTableViewCell *contactCell = (ContactsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"contactCell"]; ContactsModel *model = [[ContactsModel alloc] init]; if (self.isContactsSegment == YES) { model = self.refinedContactsSearch[indexPath.row]; } else { model = self.serverContacts[indexPath.row]; } if (contactCell == nil) { contactCell = [[OTContactsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"contactCell"]; contactCell.backgroundColor = [UIColor clearColor]; [contactCell.contactLabel setTextColor:NEON_GREEN]; [contactCell setSelectionStyle:UITableViewCellSelectionStyleNone]; [contactCell.separator setBackgroundColor:[self.contactsTableView separatorColor]]; } contactCell.contactLabel.text = [NSString stringWithFormat:@"%@ %@", model.name, model.surname]; [contactCell.contactLabel sizeToFit]; [contactCell.contactImage setImageWithURL:[NSURL URLWithString:model.pictureUrl] placeholderImage:[UIImage imageNamed:@"Logo"]]; contactCell.contactImage.layer.cornerRadius = contactCell.contactImage.frame.size.height/2; contactCell.contactImage.layer.masksToBounds = YES; return contactCell; }