Ich zeige eine modale Ansicht, die eine UITableViewController
Klasse ist. Aus irgendeinem Grund wird die Navigationsleiste nicht angezeigt, wenn ich sie zeige. Hier ist mein Code:
SettingsCreateAccount *detailViewController = [[SettingsCreateAccount alloc] initWithStyle:UITableViewStyleGrouped];
detailViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
detailViewController.navigationController.navigationBarHidden = NO;
[self.navigationController presentModalViewController:detailViewController animated:YES];
detailViewController = nil;
[detailViewController release];
Ich dachte, es wurde standardmäßig angezeigt? Wenn es hilft, rufe ich dies aus einer anderen Klasse auf, die ebenfalls von a UITableViewController
verwaltet wird UINavigationController
. Ideen?
quelle
Hier ist eine Möglichkeit, die Navigationsleiste für diejenigen anzuzeigen, die Storyboards verwenden, wie in Apples Tutorial auf Storyboard vorgeschlagen .
Da ein Modal View Controller nicht zum Navigationsstapel hinzugefügt wird, erhält er keine Navigationsleiste vom Navigationscontroller des Table View Controllers. Um dem Ansichtscontroller bei modaler Darstellung eine Navigationsleiste zu geben, binden Sie ihn in einen eigenen Navigationscontroller ein.
quelle
Unter iOS 7 möchten Sie nur eine Navigationsleiste auf Ihrem Modal View Controller, in der ein Titel und einige Schaltflächen angezeigt werden? Probieren Sie diese Magie in Ihrem UITableViewController aus:
quelle
[self.view bringSubviewToFront:self.navigationBar];
am Ende hinzugefügt habe-(void)layoutNavigationBar
.Ich möchte mitteilen, wie die akzeptierte Lösung in Projekten mit Storyboards verwendet werden kann:
Der einfache Ansatz besteht darin, vor dem VC einen leeren Storyboard-Navigationscontroller einzufügen, der modal dargestellt werden soll, sodass die Beziehungen wie folgt aussehen:
Wir haben diesen Ansatz eine Weile ausprobiert und festgestellt, dass unsere Storyboards jeweils durch eine große Anzahl solcher Navigations-Zwischensteuerungen "verschmutzt" werden! von ihnen wird ausschließlich für einen verwendet! Präsentation eines anderen Controllers, den wir modal mit Navigationsleiste präsentieren möchten.
Unsere aktuelle Lösung besteht darin, den Code von der akzeptierten Antwort in einen benutzerdefinierten Abschnitt zu kapseln:
Mit diesem Abschnitt in unserem Projekt erstellen wir keine Navigations-Controller mehr in unseren Storyboards. Wir verwenden nur diese ModalPresentationWithNavigationBarSegue wie folgt:
Ich hoffe, dass diese Antwort für Leute hilfreich ist, die unnötige Doppelarbeit in ihren Apps-Storyboards vermeiden möchten.
quelle
Wenn Sie nur eine benötigen
NavigationBar
, können Sie eine Instanz von hinzufügenUINavigationBar
und BarItems zuweisen.quelle
Ich wollte nur etwas zu dem hinzufügen, was @Scott gesagt hat. Seine Antwort ist definitiv die einfachste und am meisten akzeptierte Methode, dies jetzt mit Storyboards, iOS 7 und 8 zu tun ... (und bald auch mit 9).
Das Hinzufügen und Einbetten eines View Controllers zum Storyboard und das Einbetten wie von @Scott beschrieben ist der richtige Weg.
Fügen Sie dann einfach den Segue hinzu, indem Sie die Steuerung vom Quellansichts-Controller zum Ziel ziehen (das, das Sie modal anzeigen möchten), und wählen Sie "Modal präsentieren", wenn die kleine Ansicht mit den Auswahlmöglichkeiten für den Segue-Typ angezeigt wird. Wahrscheinlich auch gut, um ihm einen Namen zu geben (im folgenden Beispiel verwende ich "presentMyModalViewController").
Eine Sache, die ich brauchte, die fehlte, ist @ Scotts Fall, wenn Sie tatsächlich einige Daten an diesen modal dargestellten Ansichts-Controller weitergeben möchten, der in den Navigations-Controller eingebettet ist.
Wenn Sie den segue.destinationViewController greifen, handelt es sich um einen UINavigationController, nicht um den Controller, den Sie in den UINavigationController eingebettet haben.
Um zum eingebetteten Ansichts-Controller im Navigations-Controller zu gelangen, habe ich Folgendes getan:
Hoffe das hilft!
quelle