2009-04-02 7 views
5

Als jemand, der ziemlich neu in der iPhone-Entwicklung ist, habe ich versucht, gute Entwurfsmuster für die Verwaltung mehrerer Untersichten zu finden, insbesondere wo die Untersichten den gleichen Typ von zu definierenden Delegate-Methoden benötigen.Wie organisieren Sie am besten mehrere Teilansichten?

Zum Beispiel habe ich eine Ansicht, wo ich zwischen 2 UITableViews basierend auf Benutzeraktionen austauschen muss. Beide UITableViews benötigen ein UITableViewControllerDelegate-Objekt, das zum Auffüllen der Zeilen usw. definiert ist.

Haben erfahrene iPhone-Entwickler festgestellt, dass das Überladen des Hauptansicht-Controllers als Stellvertreter für beide Teilansichten der richtige Weg ist? Derzeit habe ich zwei Objekte definiert, die jeweils als Delegat für jedes UITableView fungieren, um die Dinge organisierter zu gestalten. Es vollbringt, was ich brauche, aber ist das ein gutes Muster, dem ich folgen soll?

Ich würde davon ausgehen, dass es einige Best Practices gibt, um verschiedene Fallstricke bei der Speicherverwaltung zu vermeiden. Danke im Voraus!

Antwort

5

Sie können Ansichten als Container verwenden, um die Elemente wie Tabellen zu halten. Also, in dem Fall, Sie skizzieren, würden Sie eine Container-Ansicht und tauschen Sie UITableViews hinein und aus ihm heraus ...

Ein guter Ansatz wäre separate View-Controller für jede Tabelle zu haben. Andernfalls wird es einfach zu unordentlich, wenn Sie versuchen, den Überblick über den Datensatz zu behalten, den Sie über die verschiedenen Delegiertenmethoden für Tabellenansichten unterstützen, und es macht es schwieriger, viele Anpassungen für eine Tabelle vorzunehmen, die für andere nicht gelten.

Die Hauptsache bei Verwendung von Composed View-Controllern ist die "self.navigationController" und verwandte Aufrufe werden nichts zurückgeben (da sie nicht wirklich Kinder von Ihrem Navigation Controller sind), so dass Sie weitergeben müssen Diese Referenz oder sonstwie behandeln Sie das etwas anders in den Tabellensichtcontrollern.

1

So würde ich selbst mit der Situation umgehen. Ein Controller und Delegate pro UITableView. Die Datenquelle kann wiederverwendet werden, wenn dies sinnvoll ist (d. H. Die gleichen Daten werden in beiden UITableViews angezeigt). Andernfalls hätten Sie viele ifs in Ihren Delegate-Methoden und überprüfen, in welcher Tabellenansicht die Nachricht gesendet wird.

Switching UITableViews klingt wie Job für UINavigationController zu mir. Normalerweise auf dem iPhone, Sie nicht nur Ihre Steuerelemente neu anordnen. Sie erstellen vollständige Bilder (in Code oder als .nib über InterfaceBuilder), wechseln zwischen ihnen mit UINavigationController oder einer UITabBar.

2

Wenn es nur einen kleinen Unterschied zwischen den beiden gibt - zum Beispiel, wenn Tabellenzellen auf die gleiche Weise angeordnet sind, aber etwas andere Daten verwenden - könnte ich if-Anweisungen verwenden, ansonsten würde ich mit separaten Delegate-Objekten von eine Art. Trennung von Bedenken ist der Schlüssel hier: Wenn Sie eine Methode schreiben, die zwei sehr unterschiedliche Dinge tut, ist das ein Zeichen dafür, dass Ihr Code nicht gut genug organisiert ist, um lesbar, wartbar oder flexibel zu sein.

Vergessen Sie auch nicht, dass View-Controller keine magische Objekte haben, die Sie nur mit von Apple genehmigter Tab-Leiste und Navigations-Controllern verwenden können. Es ist völlig legitim, einen eigenen "Switching View Controller" zu schreiben, der zwei View-Controller verwendet und zwischen ihnen hin- und herwechselt. Sie müssen jedoch einige Tests durchführen, um zu bestimmen, ob Sie viewWillAppear aufrufen müssen: und so oder nicht manuell - je nachdem, wo Sie Ihren View-Controller hinzufügen, gibt es eine magische Maschine, die es für Sie tun kann oder auch nicht in der Hierarchie.