Hacemos esto por tener un solo tableview y, a continuación, hacer una instrucción if/caja en cada método de devolución de llamada tableview para devolver los datos correctos en base a qué valor se selecciona en el control segmentado.
En primer lugar, añadir el segmentedControl a la titleview, y establecer una llamada de retorno para cuando se cambia:
- (void) addSegmentedControl {
NSArray * segmentItems = [NSArray arrayWithObjects: @"One", @"Two", nil];
segmentedControl = [[[UISegmentedControl alloc] initWithItems: segmentItems] retain];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.selectedSegmentIndex = 0;
[segmentedControl addTarget: self action: @selector(onSegmentedControlChanged:) forControlEvents: UIControlEventValueChanged];
self.navigationItem.titleView = segmentedControl;
}
A continuación, cuando se cambia el control segmentado, es necesario cargar los datos para el nuevo segmento y restablecer la vista de tabla para mostrar estos datos:
- (void) onSegmentedControlChanged:(UISegmentedControl *) sender {
// lazy load data for a segment choice (write this based on your data)
[self loadSegmentData:segmentedControl.selectedSegmentIndex];
// reload data based on the new index
[self.tableView reloadData];
// reset the scrolling to the top of the table view
if ([self tableView:self.tableView numberOfRowsInSection:0] > 0) {
NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView scrollToRowAtIndexPath:topIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
}
}
Luego, en sus devoluciones de llamada tableView, es necesario tener la lógica por valor de segmento para volver lo correcto. Le mostraré una devolución de llamada como ejemplo, pero implemente el resto de esta manera:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"GenericCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"GenericCell" owner:self options:nil] objectAtIndex: 0];
}
if (segmentedControl.selectedSegmentIndex == 0) {
cell.textLabel.text = @"One";
} else if (segmentedControl.selectedSegmentIndex == 1) {
cell.textLabel.text = @"Two";
}
return cell;
}
Eso es todo, espero que ayude.
Esto es un salvavidas. Muchas gracias por la idea. – jakeboxer
Además, no te olvides de reenviar la vista de Mostrar y ver la vista de Mostrar desde el controlador de vista principal al seleccionado actualmente. –
Ok ... te llevé hasta este punto ... pero me perdiste. ¿Cómo reenvio viewWillAppear y viewWillDisappear? ¿Debo declarar removeFromSuperView en el método viewWillDisappear de la subvista cuando quiero retroceder? El código sería apreciado, si no inconveniente. –