ios objective-c ipad uinavigationcontroller uipopovercontroller

ios - Navegación dentro de un UIPopoverController



objective-c ipad (2)

No tienes un controlador de navegación en tu controlador de popover, por lo que el método self.navigationController pushViewController no funcionará. Prueba esto a continuación:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { CalendarCell *cell = (CalendarCell *)[collectionView cellForItemAtIndexPath:indexPath]; UINavigationController *insidePopoverNavigationController = [[UINavigationController alloc] initWithRootViewController:[SummaryViewController new]]; UIPopoverController *popC = [[UIPopoverController alloc] initWithContentViewController:insidePopoverNavigationController]; [popC setPopoverContentSize:CGSizeMake(320, 400)]; [self setPop:popC]; [[self pop] presentPopoverFromRect:[cell frame] inView:collectionView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }

Créditos adicionales: Raica Dumitru Cristian

Tengo un UIPopoverController que consiste en una vista de tabla. Este controlador emergente se mostró bien, y ya configuré el delegado didSelectRowAtIndexPath bien.

En este momento, quiero hacer una transición al "controlador de vista detallada" en función del elemento de la tabla en el que se hace clic. Luego, en la vista de destino, tiene el botón Atrás como pushViewController pero no funciona bien. No navegará en la vista detallada Controlador. Este es mi didSelectRowAtIndexPath :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; DetailSummaryViewController *detailVC = [[DetailSummaryViewController alloc] initWithNibName:@"DetailSummaryViewController" bundle:nil]; [self.navigationController pushViewController:detailVC animated:YES]; }

Este es mi método popupover

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { CalendarCell *cell = (CalendarCell *)[collectionView cellForItemAtIndexPath:indexPath]; UIPopoverController *popC = [[UIPopoverController alloc] initWithContentViewController:[SummaryViewController new]]; [popC setPopoverContentSize:CGSizeMake(320, 400)]; [self setPop:popC]; [[self pop] presentPopoverFromRect:[cell frame] inView:collectionView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }

Esa navegación no funcionará, pero si NSLoging el índice seleccionado funciona bien. ¿Hay algún paso en la configuración de la navegación que me extrañe?


cuando creas UIPopoverController, en lugar de configurar MyViewController dentro de UIPopoverController, debes establecer un UINavigationController

UINavigationController *insidePopoverNavigationController = [[UINavigationController alloc] initWithRootViewController:myViewController]; popoverController = [[UIPopoverController alloc] initWithContentViewController:insidePopoverNavigationController]; ...... [popoverController presentPopoverFromRect:... etc];