7 Stimmen

Sollte die Ansichtslogik in einer UIView oder (falls zutreffend) in ihrem UIViewController enthalten sein?

Ich habe kürzlich entdeckt, dass UIView s sollten nur haben UIViewController s, wenn sie das gesamte Fenster ausfüllen (oder von einem anderen Fenster verwaltet werden) UIViewController wie zum Beispiel ein UINavigationController o UISplitViewController ). Dieses Zitat stammt aus der Dokumentation für UIViewController :

Sie sollten keine View-Controller verwenden, um Views zu verwalten, die nur einen Teil ihres Fensters ausfüllen, d.h. nur einen Teil des Bereichs, der durch das Rechteck des Anwendungsinhalts definiert ist. Wenn Sie eine Schnittstelle haben möchten, die aus mehreren kleineren Views besteht, betten Sie sie alle in einen einzigen Root-View ein und verwalten diesen View mit Ihrem View-Controller.

In der Regel lege ich meine View-Logik in die UIView, auch wenn sie von einem UIViewController verwaltet wird. Dennoch muss ich oft auf Eigenschaften des UIViewControllers zugreifen, z. B. auf die Eigenschaft navigationController. UIViews sollten jedoch nicht von ihrem UIViewController wissen.

Meine Schlussfolgerung ist, dass View-Logik in einem UIView's UIViewController gehen sollte, wenn ein vorhanden ist, und in der UIView selbst sonst.

Ist es alternativ besser, eine Controller-Klasse für eine Ansicht zu erstellen, die ノット eine Unterklasse von UIViewController? UIPopoverController (eine NSObject-Unterklasse) scheint diesem Muster zu folgen, obwohl in den meisten Fällen (UIButton usw.) Views keine eigenen Controller-Klassen zu haben scheinen.

5voto

Alex Punkte 26769

Die Anwendungslogik sollte niemals in einer UIView . Zeitraum. Der Zweck einer UIViewController dient der Verwaltung einer Ansicht und ihrer Unteransichten und ist unter den meisten Umständen der geeignete Ort für die Logik. UIKit hält sich an das Model-View-Controller-Paradigma. Modelle enthalten die Daten, Views zeigen sie an und nehmen Eingaben entgegen, und Controller verwalten die Interaktion zwischen den beiden anderen Schichten. Aus diesem Grund ist der Controller der logische Ort für die Anwendungslogik. In iOS, UIViewController und ihre Unterklassen sind die üblichen Controller-Klassen. Ich würde vorschlagen Lektüre von Apples Prognosen um dieses Muster und seine Verwendung in iOS besser zu verstehen.

Das Zitat aus der Apple-Dokumentation besagt, dass Sie keine UIViewController für jedes Etikett oder jede Schaltfläche. Sie erstellen eine für jede "Seite" oder jeden "Bildschirm" Ihrer Anwendung und verwenden sie zur Verwaltung der Steuerelemente in dieser Ansicht. Beachten Sie, dass UIKit über Klassen zur Verwaltung von Tabellenansichten, Registerkartenansichten und Navigationsansichten verfügt. Das ist die Ebene der Objekte, die Sie verwenden würden UIViewController zu verwalten.

Ich empfehle, sich die iOS-Beispiele anzusehen, die im SDK enthalten sind. Sie sollten Ihnen eine gute Vorstellung davon vermitteln, wie das Framework die Struktur von Anwendungen erwartet.

3voto

MrAnonymous Punkte 707

Ich komme aus der Win32 + .NET + Java Swing GUI Welt und habe früher das Gleiche gemacht. Aber dann habe ich meine schlechten Gewohnheiten abgelegt. Jetzt die einzige Zeit, die ich Code in UIView setzen ist, wenn ich die VIEW selbst (OpenGL Zeichnung, zum Beispiel) anpassen möchten.

Controller legen den Zustand der Ansicht fest. Die Ansicht rendert ihren Zustand.

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