16 Stimmen

pushViewController ohne Navigationscontroller

Ich habe eine Klasse, die vom Typ UITableViewController . Diese Klasse hat ein Mitglied vom Typ UINavigationBar die ich zum Hinzufügen einer Bearbeitungsschaltfläche für die Tabellenansicht verwende.

Der Aufruf dieser Methode ist ungültig.

[self.navigationController pushViewController:controller];

Wie kann ich eine Detailansicht auf die Ansicht schieben, nachdem ich eine Tabellenzeile ausgewählt habe, ohne meine UITableViewController in einem UINavigationController ?

38voto

Filip Radelic Punkte 26548

Die nächstliegende Alternative, wenn Sie keinen Navigationscontroller verwenden wollen, sind modale Viewcontroller.

[self presentViewController:controller animated:YES completion:nil];

Dadurch wird der Controller von unten in den Bildschirm geschoben, oder wenn Sie den Controller modalTransitionStyle Es kann umklappen oder eingeblendet werden.

Um den Controller zu entlassen, rufen Sie einfach an:

[self dismissViewControllerAnimated:YES completion:nil];

16voto

Petter Punkte 161

Ich würde die UITableView innerhalb einer UINavigationController wickeln und nur die UINavigationBar ausblenden.

[self.navigationController setNavigationBarHidden:YES animated:NO];

Und dann erstellen Sie eine Zurück-Schaltfläche, die den ViewController aus dem Stapel herausnimmt.

[self.navigationController popViewControllerAnimated:YES]

15voto

José Punkte 2913

Man könnte auch wie gewohnt einen Navigation Controller verwenden und ihn dann ausblenden.

So blenden Sie den Navigations-Controller in Storyboards aus: Wählen Sie ihn aus und deaktivieren Sie im Attributinspektor die Option "Navigationsleiste anzeigen". Andere schlagen vielleicht vor, die Navigationsleiste in jedem Controller auszublenden, aber das Problem dabei ist, dass sie nur für eine Millisekunde erscheint und dann verschwindet.

Navigation Controller attributes tab

6voto

Anomie Punkte 89467

Sie können einen View-Controller nicht auf einen Navigations-Controller schieben, wenn es keinen Navigations-Controller gibt. Wenn Sie Controller schieben wollen und den obersten Controller und alles anzeigen lassen wollen, verwenden Sie einfach einen UINavigationController und sind damit fertig.

Sie können beliebige UINavigationItem s auf Ihre UINavigationBar, und der Delegierte Ihrer Leiste wird benachrichtigt, wenn der Benutzer die Zurück-Schaltfläche verwendet, so dass Sie entsprechende Maßnahmen ergreifen können. Siehe die Dokumentation für weitere Informationen.

1voto

Joe149 Punkte 81

Es stimmt, dass ohne eine UINavigationController können Sie keine View-Controller verschieben. Sie präsentieren View-Controller vielmehr modal über UIViewController.present(_ viewControllerToPresent:, animated:, completion:)

Aber es ist möglich, eine benutzerdefinierte Segue zu erstellen, um den View-Controller so darzustellen, als ob er ein Push wäre (oder jede andere Animation, die Sie wollen), obwohl es scheint, dass die Verwendung einer UINavigationController macht die Dinge einfach einfacher.

Hier finden Sie einige Links zu der entsprechenden Dokumentation:

UINavigationController-Klassenreferenz

Anpassen der Übergangsanimationen

Einen modalen View Controller präsentieren

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X