Actuar sobre el clic de un botón en la barra de navegación para moreNavigationController - No se puede pushviewcontroller

StackOverflow https://stackoverflow.com/questions/2609318

Pregunta

De acuerdo, aquí está mi problema: Mi aplicación tiene una pantalla de categorías en la barra de pestañas en la parte inferior de la pantalla iPhoneOS. Esto sólo permite 5 categorías antes de que presente el botón MÁS. Tengo más de 25 (por favor no responder a esto diciendo: "reconsiderar su aplicación ... etc" - que se dijo rudamente antes de ser comida, bebida, etc. categorías y no se pueden cambiar). Quiero permitir al usuario poner sus favoritos en la página principal. El sistema de edición de Apple sólo permite moreNavigationController 20 artículos barra de pestañas para reorganizarse debido a las limitaciones de espacio en la página de edición. Esto no es suficiente por eso es necesario para poner en práctica mi propia pantalla de edición. He establecido la rightBarButtonItem a cero y creé mi propia. Usando NSLog, puedo ver el "clic" que ocurre cuando hace clic en el botón EDITAR, pero no puedo empujar usando pushViewController. No pasa nada. Creo que tiene algo que ver con la navigationController me dirijo ... pero no estoy seguro. PD: Todo esto sucede en mi aplicación Delegado que no actúan como UITabBarControllerDelegate y UINavigationControllerDelegate

.

He intentado hacer lo siguiente:

 - ( void )navigationController:( UINavigationController * )navigationController_local willShowViewController:( UIViewController * )viewController_local animated:( BOOL )animated
{

    UIViewController * currentController = navigationController_local.visibleViewController;
    UIViewController * nextController = viewController_local;

 // Do whatever here.
 NSLog(@"Nav contoller willShowViewController fired\n'%@'\n'%@'\nThere are currently: %d views on the stack\n",currentController,nextController,[self.navigationController.viewControllers count]);

 if ( [nextController isKindOfClass:NSClassFromString(@"UIMoreListController")])
 {
  UINavigationBar *morenavbar = navigationController_local.navigationBar;
  UINavigationItem *morenavitem = morenavbar.topItem;
  morenavitem.rightBarButtonItem = nil;
  NSLog(@"Is a UIMoreListController\n");

  UIBarButtonItem *editTabBarButton = [[UIBarButtonItem alloc]
             initWithTitle:@"Edit"
             style:UIBarButtonItemStylePlain
             target:self
             action:@selector(editTabBar:)];

  morenavitem.rightBarButtonItem = editTabBarButton;
  [editTabBarButton release];
 }


}

Estos trabajos para colocar un botón de edición en la parte superior derecha de la pantalla -. Imitando aspecto y el tacto de Apple ... pero cuando se hace clic en ese botón, no se puede salir de la maldita moreNavigationController

He intentado muchas cosas. UIAlerts trabajo, etc ... pero de empuje (o reventar - incluso apareciendo a la vista de la raíz). Un controlador de vista sobre la pila no

- (void) editTabBar:(id)sender {
 NSLog(@"clicked edit tabbar\n");
 NSLog(@"Total count of controllers: %d\n",[self.navigationController.viewControllers count]);

 TabBarViewController *tabBarViewController2 = [[TabBarViewController alloc] initWithNibName:@"TabBarView" bundle:nil];
  tabBarViewController2.navigationItem.title=@"Edit Tab Bar";
  [self.navigationController pushViewController:tabBarViewController2 animated:YES];
  [tabBarViewController2 release];

NSLog(@"finished edit tabbar\n");

}

Si hace clic en el botón de edición en la página de visualización del moreNavigationController, se obtiene las entradas de registro Al igual que lo esperado y (esto es raro) de las vistas en las subidas de pila -, pero no se produce ningún cambio de página. He marcado abajo a no utilizar el controlador de navegación correcta ... pero estoy perdido en cómo encontrar cuál utilizar.

Este es un raro también. En la función de edición si acabo de hacer esto:

- (void) editTabBar:(id)sender {
self.tabBarController.selectedIndex = 0;
}

Me hace llevar a casa (a tabBarController 0)

Pero hacer esto:

 - (void) editTabBar:(id)sender {
    [self.navigationController popToRootViewControllerAnimated:YES];
    }

no funciona.

¿El moreNavigationController tiene alguna cualidad especial que los tornillos con el resto del sistema?

¿Fue útil?

Solución

Yo intentaría reimplementar todo el "Más" funcionalidad a partir de cero. En otras palabras, almacenar las cuatro pestañas casa en su defecto por el usuario y añadir una quinta pestaña ficticia que cambia a su propio reimplementación completa de la pila más vista controlador.

Incluso podría escribir una subclase de peso ligero de UITabBarController que maneja esto para usted.

Otros consejos

UITabBarController es malo, así que no me sorprendería en absoluto si MoreController tenía algunas propiedades especiales, también.

he tenido éxito interceptando el controlador Más en shouldSelectViewController para cambiar la fuente de datos; usted puede ser capaz de encontrar alguna solución allí.

PS Me inclino a estar de acuerdo en que usted podría considerar el rediseño de su aplicación para que no se necesitaba un número ilimitado de viewControllers unidos a la barra de pestañas sólo para seleccionar las categorías; es posible que tenga mejor suerte usando una barra de herramientas con una visión única y personalizada, desplazable en ella. Si eso es realmente la mejor manera de recoger categorías para su aplicación, por supuesto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top