Wenn ich eine benutzerdefinierte UIView aus einem UITableViewController öffnen, wie schließe ich die benutzerdefinierte Ansicht und gehen Sie zurück in die Tabellensicht?
-
06-07-2019 - |
Frage
Ich bin mit einem UITableViewController
für ein Menü in einem Spiel. Die Tabellenansicht öffnet ich einen einen View-Controller für meinen benutzerdefinierten UIView
, die das Spiel zeigt. Wenn das Spiel beendet ist, die UIView
mitgeteilt (die irgendwie ist die MVC Prinzipien zu ruinieren) und von dort bin ich irgendwie verloren.
Fragen:
- Kann ein
UIView
mit seinem Controller kommunizieren? Wie? - Kann man Controller reden die, die es begann? Wie?
- Wie über ich zwischen all diesem komplizierten Netz von Ansichten und Controller anmutig?
Lösung
-
Verwenden Sie hier einen Delegierten-Protokoll. Ihr benutzerdefiniertes Spiel UIView kann eine
delegate
Eigenschaft und rufen Methoden auf diesem Delegaten, wenn Ereignisse eintreten (Spiel vorbei, Spiel pausierte, Ansicht geschlossen, etc). Hier ist ein großer Beitrag ist Delegierten mit: Wie erstelle ich Delegierten in objektiv- C? -
Ich würde empfehlen, eine UINavigationController verwenden. Sie müssen nicht unbedingt die Navigationsleiste zeigen, aber wenn Sie nisten Ihre Ansicht-Controller in einer Navigationssteuerung haben Sie Zugriff auf
-pushViewControllerAnimated:
und-popViewControllerAnimated:
die es zur Navigation zwischen den Ebenen von verschachtelten View-Controller einfach. -
Ein weiterer Vorteil des UINavigationController -. Sie werden eine schöne Folienanimation erhalten, wenn Sie zwischen den Ansichten wechseln
Es gibt andere 3rd-Party-Mechanismen gibt, die Sie über die UIKit UINavigationController / UIViewController Mechanismen bevorzugen. Schauen Sie sich die Three20 Projekt , insbesondere die TTNavigationCenter Klasse.