2010-08-06 21 views
6

Tengo un problema donde puedo presionar exitosamente un nuevo controlador de vista desde mi controlador de vista raíz (usando la aplicación basada en Navegación usando la plantilla Datos básicos), pero la vista de detalles, es un archivo xib separado del controlador de vista raíz, no muestra el botón de navegación hacia atrás. Estoy seguro de haber hecho todas las conexiones adecuadas en IB, y todo lo demás está funcionando como se esperaba.Botón de navegación hacia atrás que no aparece en Controlador de vista presionada

RootViewController.h

@class ItemsViewController; 

@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate> { 

IBOutlet ItemsViewController *itemsVC; 

} 

@property (nonatomic, retain) IBOutlet ItemsViewController *itemsVC; 

@end 

RootViewController.m

#import "ItemsViewController.h" 

@synthesize itemsVC; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Pushes to ItemsViewController 

ItemsViewController *itemsViewController = [[ItemsViewController alloc] initWithNibName:@"ItemsViewController" bundle:[NSBundle mainBundle]]; 

[self.navigationController pushViewController:itemsViewController animated:YES]; 
[itemsViewController release]; 

} 

ItemsViewController es una subclase UITableViewController con su propio xib, también llamado ItemsViewController. Nuevamente, se empuja desde RootViewController, pero el botón Atrás no aparece like this.. Tenía la impresión de que era una función "gratuita" de usar un controlador de navegación. Como era de esperar, este es un obstáculo muy frustrante y agradecería cualquier ayuda.

+0

Tuve el mismo problema hasta que vi esta publicación. Eso es realmente un comportamiento predeterminado raro. ¿Por qué no simplemente "Atrás" si no se proporciona un título? –

+0

Sí, eso o algún tipo de error o advertencia en Xcode sería bueno. –

Respuesta

14

¿Su clase ItemsViewController establece su propiedad title en su método viewDidLoad?

Debe llamar al [tableView deselectRowAtIndexPath:indexPath animated:YES] como la última línea de tableView:didSelectRowAtIndexPath: para cumplir con las pautas de la interfaz humana de Apple.

+0

No he configurado el título todavía. Va a venir de una propiedad de nombre de CD que uno ingresa desde el RVC. ¿El título debe establecerse para que aparezca el botón Atrás? –

+1

Es cierto. Pero siempre deberías tener un título en la barra de navegación. ¿Qué tal esto? ¿Estás configurando el 'título' en el método' viewDidLoad' de RootViewController'? He tenido problemas antes con el botón Atrás cuando el título de la vista raíz no estaba configurado. –

+1

Disculpe mientras levanto mi cara del escritorio.Establecer un título en el RVC me dio el botón Atrás. Supongo que necesita ser poblado antes de que se renderice. Gracias por la sugerencia, ¡no me olvidaré de eso pronto! –

9

Sí, asegúrese de tener un título en su RootViewController, si no aparece ningún botón aparecerá. Para establecer un título programáticamente;

self.navigationItem.title = @"Hello Der"; 
1

Algo de información adicional para los futuros lectores: me encontré con este problema al tratar de repoblar una jerarquía de navegación en la carga de aplicaciones, por lo que estaba llamando setViewControllers: a partir de la solicitud del delegado de la aplicación: didFinishLaunchingWithOptions: método. Y me encontré con el mismo problema con el botón de retroceso que no aparece.

En mi caso, establecer el título del elemento de navegación del controlador de vista raíz en viewDidLoad no funcionó, presumiblemente porque las otras vistas se cargaban primero y veían el título de la raíz como nulo. En su lugar, establecí el título del elemento de navegación del controlador de vista raíz en mi aplicación: didFinishLaunchingWithOptions: método justo antes de llamar a setViewControllers :, y eso lo solucionó.

0

Pruebe siguiendo snippet. ¡Funciona para mí!

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Image.png"] forBarMetrics:UIBarMetricsDefault]; 

[self.navigationController.navigationBar bringSubviewToFront:[self.navigationController.navigationItem backBarButtonItem]]; 
0

Esto también puede suceder si eres un cabeza hueca e inicializa erróneamente la vista como modal en lugar de presionar una vista hacia el controlador de navegación.

oops: [self presentModalViewController: navController animated: YES]; significaba: [self.navigationController pushViewController: controlador animado: SÍ];

Cuestiones relacionadas