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:
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 🙁
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim init eines view-controller aus einer Feder, die es eigentlich gar nicht " laden der nib rechts Weg, so
viewSettings.navigationController
ist immer noch null. Das erste mal, wenn Sie dieview
Eigenschaft, die Feder geladen wird.Update
Könnte man das laden der nib-sich selbst und schnappen Sie sich den navigation-controller, etwa so:
Ich benutzte Objekt am index 1, weil in deinem screenshot gibt es eine tableview, die ich denke, index 0.
Aktualisiert meine Antwort
Ich versuche "NSArray *Federn = [[NSBundle mainBundle] loadNibNamed:@"ViewSettings" owner:self options:nil];" bekomme aber diese Fehlermeldung: "diese Klasse ist nicht die key-value-coding-konform für die Schlüssel navigationController" Es gibt eine Menge threads mit dieser Fehlermeldung, aber ich weiß nicht wo mein Fehler ist 🙁 ich denke, Verbinde ich die UINavigationController in einer falschen Weise in den Interface Builder. Aber wie tun Sie das richtige? Ich nur ziehen und ablegen der UINavigationController in der ViewSettings.xib (siehe Abbildung), und legen Sie die "Referencing Outlets" zu "navigationController". Bitte um Hilfe...
Welche Art von Objekt File ' s Owner der nib?
"ViewSettings" ist ein UITableViewController. Ich erstelle in Xcode: "Neue Datei... -> UIViewController subclass" und aktiv die checkbox "UITableViewController subclass" und "With XIB for user interface". Also ich habe 3 generierte Dateien: ViewSettings.h, ViewSettings.m und ViewSettings.xib
InformationsquelleAutor Brian
Wäre es hilfreich, wenn Sie zu zeigen Sie den Inhalt Ihres nib-Datei, da ich vermute
viewSettings.navigationController
ist null.navigationController
ist eine Eigenschaft allerUIViewControllers
was Ihnen Ihre Eltern navigation view Controllers, falls vorhanden. Es klingt wie Sie noch nie IhrenviewSettings
view-controller, ein navigation-controller Stapel von view-Controller.InformationsquelleAutor Jonah