So erstellen Sie eine UIViewController mit UINavigationController mit Interface Builder?

In meiner iOS-Anwendung, ich will einen settings-view. "presentModalViewController" funktioniert sehr gut:

ViewSettings *controller = [[ViewSettings alloc] initWithNibName:@"ViewSettings" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
[self.navigationController presentModalViewController:navController animated:YES];      
[controller release];
[navController release];

Leider, ich meine das ausführen von code und erstellen Sie die ViewSettings einschließlich der UINavigationController im Interface Builder. Warum? Lange Geschichte, ich erkläre es am Ende von diesem thread...

Ich versuche per drag-and-drop ein UINavigationController in meinem ViewSettings und erstellen Sie ein IBOutlet, um es in meine Klasse. Ich gebe diesem controller zu "presentModalViewController", aber die Anwendung ist abgestürzt...

Was ich falsch mache?


[BEARBEITEN]

Fehlermeldung: GDB: Program received signal: "SIGABRT".
Der Fehler passiert in der letzten Zeile, diesen code ein:

ViewSettings *viewSettings = [[ViewSettings alloc] initWithNibName:@"ViewSettings" bundle:nil];
UINavigationController *navController = viewSettings.navigationController;
UINavigationBar *navBar = navController.navigationBar;
OwnNavigationBar *ownNavBar = (OwnNavigationBar *)navBar;
[ownNavBar drawHeaderImage:YES];
[self.navigationController presentModalViewController:navController animated:YES];

Detaillierte Fehler: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Anwendung versucht, eine null-modal-view-controller auf den Gegner .'

[/EDIT]


[EDIT2]
Vielen Dank für Ihre Hilfe!
Ja, navigationController ist null...
Ich glaube, ich fügen Sie die UINavigationController in einer falschen Art und Weise... ich habe es in dieses Fenster, da es nicht möglich war, um es direkt zu sagen aus meiner Sicht:
So erstellen Sie eine UIViewController mit UINavigationController mit Interface Builder?
Wie füge ich die UINavigationController korrekt?
[/EDIT2]


PS: Warum muss ich verwenden, IB? (überspringen Sie diesen...)

Brauche ich ein hintergrund Bild in meinem UINavigationBar. Mein Erster Versuch war:

UIImage *image = [UIImage imageNamed: @"header.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.navigationController.navigationBar addSubview:imageView];
[self.navigationController.navigationBar sendSubviewToBack:imageView];

Aber einige Probleme, den Titel oder ein UIBarButton ist nicht sichtbar! Ich habe versucht, eine Menge, z.B. setzt den "tag" der Blick und sendSubviewToBack in jeder Ansicht, aber kein Erfolg. Dies ist ein sehr störender bug!

Mein zweiter Versuch war um eine Kategorie zu erstellen und überschreiben Sie die drawRect-Methode:

@implementation UINavigationBar(MyNavigationBar)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"header.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

Aber jetzt, alle meine UINavigationBars habe ein hintergrund Bild und ich kann nicht deaktivieren Sie es. Das problem ist, dass "ViewSettings" muss das Hintergrundbild, aber die folgende schob sich die Ansichten nicht.

Leider ist es nicht möglich, zum festlegen einer Eigenschaft in eine Kategorie oder ein Aufruf [super drawRect:rect] zu vermeiden, das malen des Bildes.

Mein letzten Versuch ist mit dem schreiben eines eigenen UINavigationBar

@interface OwnNavigationBar : UINavigationBar {
    BOOL _drawHeaderImage;
}

Nun kann ich die drawRect-Methode!! SUPER!!!!

- (void)drawRect:(CGRect)rect {
    if (_drawHeaderImage) {
        UIImage *image = [UIImage imageNamed: @"header.png"];
        [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    }
    else {
        [super drawRect: rect];
    }
}

Aber ich feiere zu früh... 🙁
Es ist nicht möglich, um ein eigenes UINavigationBar in der UINavigationController!!!
"navigationBar" in UINavigationController ist ein nur-lese-Eigenschaft!
AAAAHHHHHHHHHH!

Habe ich noch eine Letzte chance: im Interface Builder ist es möglich, ein UINavigationController eine eigene UINavigationBar!!
JA! ICH HABE ES!! 🙂

Konfigurierte ich es in meinem MainWindow_iPhone.xib und es funktioniert Super!
Nun, ich habe zur Umsetzung dieser für meine ViewSettings, weil diese (modal) view braucht eine neue UINavigationController.

PS: Vielleicht kann jemand senden diesen thread zu Apple, dies alles sind sehr ärgerlich Umstände und Fehler 🙁

Gibt es irgendwelche Fehlermeldungen beim crash passiert?
Was ist der crash-Fehler-und stack-trace?
GDB: Program received signal: "SIGABRT". Werde ich Bearbeiten, meine Frage oben, einen moment bitte...
Dies ist ein ziemlich allgemeiner Fehler, können Sie viel mehr zu erzählen von der Anzeige der debug-log. Stellen Sie sicher, dass Sie im debug-Modus ausgeführt wird, und klicken Sie auf das kleine "Konsole anzeigen" - button, nachdem es stürzt ab. Dann post die tatsächlichen crash Fehlermeldung und stack trace - - - soll helfen, ein wenig mehr 😉
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Anwendung versucht, eine null-modal-view-controller auf den Ziel - <UINavigationController: 0x4d3cdc0>.'

InformationsquelleAutor Manni | 2011-01-05

Schreibe einen Kommentar