2010-08-06 2 views
6

Ich habe ein Problem, wo ich erfolgreich einen neuen View-Controller von meinem Root-View-Controller (mit der Navigation-basierten Anwendung mit Core Data Vorlage) schieben kann, aber die Detailansicht, die ist eine separate XIB-Datei vom Root-View-Controller, zeigt nicht die Zurück-Navigationsschaltfläche an. Ich bin sicher, dass ich alle richtigen Verbindungen in IB gemacht habe, und alles andere funktioniert wie erwartet.Zurück Navigationstaste nicht in gedrückter Ansicht angezeigt Controller

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 ist eine UITableViewController Unterklasse mit einem eigenen xib, auch ItemsViewController genannt. Wieder wird es von RootViewController geschoben, aber die Zurück-Schaltfläche wird nicht angezeigt like this. Ich hatte den Eindruck, dass es eine "kostenlose" Funktion der Verwendung eines Navigationscontrollers war. Wie zu erwarten, ist dies eine sehr frustrierende Blockade und ich würde mich über jede Hilfe freuen.

+0

Ich hatte das gleiche Problem, bis dieser Beitrag angezeigt wurde. Das ist wirklich seltsames Standardverhalten. Warum nicht einfach "Zurück", wenn kein Titel angegeben wird? –

+0

Ja, oder irgendeine Art von Fehler oder Warnung in Xcode wäre nett. –

Antwort

14

Passt Ihre ItemsViewController Klasse ihre title Eigenschaft in ihrer viewDidLoad Methode an?

Sie sollten [tableView deselectRowAtIndexPath:indexPath animated:YES] als die letzte Zeile von tableView:didSelectRowAtIndexPath: anrufen, um den menschlichen Schnittstellenrichtlinien von Apple zu entsprechen.

+0

Ich habe den Titel noch nicht festgelegt. Es wird von einer CD-Namenseigenschaft kommen, die man vom RVC eingibt. Muss der Titel festgelegt werden, damit die Schaltfläche "Zurück" angezeigt wird? –

+1

Wahr. Aber du solltest immer einen Titel in der Navigationsleiste haben. Wie wäre es damit: Setzen Sie den Titel in der 'viewDidLoad' Methode von' RootViewController'? Ich hatte Probleme mit der Zurück-Schaltfläche, als der Titel der Stammansicht nicht festgelegt wurde. –

+1

Entschuldigung, während ich mein Gesicht vom Schreibtisch abhebe.Das Setzen eines Titels im RVC gab mir den Zurück-Button. Ich denke, es muss ausgefüllt werden, bevor es rendert. Danke für den Tipp, das werde ich nicht so schnell vergessen! –

9

Ja, stellen Sie sicher, Sie haben einen Titel auf Ihrem RootViewController, wenn es keine Schaltfläche wird angezeigt. Einen Titel programmgesteuert festlegen;

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

einige zusätzlichen Informationen für zukünftige Leser: Ich in dieses Problem lief während einer Navigationshierarchie auf Anwendungslast wieder bevölkern versuchen, so wurde ich setViewControllers Aufruf: von der Anwendung des AppDelegate: didFinishLaunchingWithOptions: Methode. Und ich stieß auf das gleiche Problem mit dem Zurück-Knopf, der nicht auftauchte.

In meinem Fall, die Einstellung der Nav-Eintrag Titel des Root-View-Controller in seiner AnsichtDidLoad hat nicht funktioniert, vermutlich weil die anderen Ansichten zuerst geladen wurden und den Titel des Stammes als Null. Stattdessen habe ich den Nav-Titel des root-view-controllers in meiner application: didFinishLaunchingWithOptions: -Methode gesetzt, bevor ich setViewControllers: aufgerufen habe, und das wurde behoben.

0

Versuchen Sie folgendes Snippet. Es funktioniert für mich!

0

Dies kann auch passieren, wenn Sie ein Dummkopf sind und die Ansicht fälschlicherweise als modal initialisieren, anstatt eine Ansicht auf den Navigationscontroller zu schieben.

oops: [selbst anwesendModalViewController: navController animiert: YES]; gemeint: [self.navigationController pushViewController: Controller animiert: YES];

Verwandte Themen