Als Neuling ist IB und alle möglichen Verbindungen verwirrend für mich. Die meisten Tutorials, die ich gefunden habe, sind die Reinkarnation von Spaghetti-Code, bei der die Verschränkung alle durch Ziehen erzeugten Verbindungen sind. Natürlich möchte ich IB für das Layout von Ansichten verwenden (Größe & Platzierung von visuellen Elementen), das ist, was IB ist toll für. Aber ein Controller ist keine Ansicht, daher ist es weniger verwirrend, wenn alle meine Controller nur Code sind und nirgendwo in IB erscheinen. Ich vermute, das wird die Spaghetti minimieren. Es ermutigt auch die One-Xib-Per-View-Ermahnung. Zu diesem Zweck, und hier ist die Frage, wo kann ich Beispielprojekte finden, die dieser Strategie folgen?Wie man Controller aus xib heraus hält
Antwort
Gute Frage. Das Muster, mit dem ich mich bemühe, besteht darin, den Controller im Code zu machen, IBOutlets und IBActions für die Dinge in der XIB/NIB, die mit diesem Code interagieren, und eine Sache im Konstruktor der Steuerung, die die XIB/NIB mit "self" lädt der Besitzer, und in IB verbinde ich Sachen mit dem Platzhalter "File's Owner", dessen Identität ich als die Klasse meines Controllers angegeben habe.
Ich habe nicht eine Reihe von Beispielprojekten, aber ich werde Ihnen einige Informationen darüber geben, wie die Dinge funktionieren und wann Sie Controller in einer XIB-Datei oder in Code erstellen sollten.
Wenn Ihre Controller dynamisch über eine Benutzeraktion erstellt werden, werden Sie diese in der Regel nicht in einer XIB-Datei instanziieren. Stattdessen werden Sie sie in Code instanziieren, wie oben erwähnt. Sobald Sie dies getan haben, benötigen Sie weiterhin einen Mechanismus, um diesen Controller, der in Code erstellt wurde, mit den Elementen der Benutzeroberfläche zu verbinden, die Sie in IB erstellt haben.
Der Mechanismus, den IB zur Lösung dieses Problems bietet, ist der Eigentümer der Datei. Das Beherrschen des Eigentümers der Datei ist wichtig, um den Interface Builder zu bekommen.
Der Besitzer der Datei ist kein Objekt, das sich in der XIB-Datei befindet, sondern ein Objekt, das in der XIB-Datei enthalten ist. Es ist ein Platzhalter für ein Objekt, das bereits vorhanden ist, wenn die XIB-Datei geladen wird. Wenn NIB-Dateien zur Laufzeit geladen werden, werden sie mit der NSBundle-Methode geladen - [NSBundle loadNibNamed: ownwer: options:]. Der Besitzerparameter wird verwendet, um das Besitzerplatzhalterobjekt der Datei in der XIB/NIB-Datei aufzulösen. Wenn die Datei zur Laufzeit geladen wird, werden alle Verbindungen, die mit dem Eigentümer der Datei hergestellt wurden, mit dem Objekt aufgelöst, das Sie als Besitzerparameter an die NSBundle-Methode übergeben haben. Auf dem iPhone laden Sie die NIB-Datei normalerweise nicht selbst. Stattdessen erledigt UIViewController das für Sie. Die Standardimplementierung von UIViewController des Loadview-Methode könnte wie folgt aussehen:
- (void)loadView {
[[self nibBundle] loadNibNamed:[self nibName] owner:self options:nil];
}
So, indem Sie die Elemente in Ihrer XIB-Datei in die Akten der Besitzer verbindet, werden Sie sie auf Ihren View-Controller werden zu verbinden.
Sie haben einige Controller, die statisch in Ihrer Anwendung sind - sie werden für immer am Leben sein. Ein Navigations- oder Tab-Controller mitsamt seinen Root-Elementen ist typischerweise für die gesamte Lebensdauer seiner Anwendung aktiv. Wenn das der Fall ist, würde ich diese Ansichtscontroller in der MainWindow.xib-Datei einrichten. Die meisten anderen Controller würden dynamisch und programmatisch als Reaktion darauf erstellt, dass der Benutzer Dinge tut.
- 1. Wie Ruby on Rails Konfigurationswerte aus der Anwendung heraus Controller
- 2. Wie man Filterparameter hält. Paginierung
- 3. Wie finde ich heraus, welcher Thread den Monitor hält?
- 4. Wie man ein Versprechen hält
- 5. Wie lade ich Xib-Dateien mit angehängtem View-Controller?
- 6. Wie ein UITableViewCell aus einem einzigen xib
- 7. Wie startet man Linux aus einem C++ Programm heraus?
- 8. Subclipse: Wie man einen Zweig synchron hält?
- 9. Wie man Java-Eigenschaftendateien menschenlesbar hält
- 10. Maven: Wie man eine Abhängigkeit hält?
- 11. Wie man die Taste gedrückt hält
- 12. android - wie man enum von prouard hält
- 13. Wie man Listener Thread lebendig hält
- 14. Wie man nur Duplikate effizient hält?
- 15. Wie man einen Elementzustand zwangsweise unverändert hält
- 16. Wie man MEAN (Stack) am Laufen hält?
- 17. Wie man eine alexa Fähigkeit offen hält?
- 18. So wählen Sie Hintergrundansichten in einem Storyboard oder Xib aus
- 19. Wie verwendet man Segmente vom View-Controller, der ein XIB für sein Design hat?
- 20. iOS: Wie man Ansichten mit XIB programmatisch erstellt, aber ohne View Controller zu verwenden
- 21. Code hält das Timing aus
- 22. Wie ssh aus einem Bash-Skript heraus?
- 23. So laden Sie eine Ansicht XIB als Unteransicht in einen View-Controller XIB
- 24. initialisieren UISegmentedControl programmgesteuert auf einem View-Controller mit einem XIB
- 25. Wie seperate xib für iphone aus bereits bestehenden für ipad
- 26. Wie lade ich einen Viewcontroller aus einer XIB-Datei?
- 27. Wie man gestrichelte Linien vom "Tanzen" in OpenGl hält?
- 28. Wie finden Sie heraus, in welchem Controller und in welcher Aktion Sie sich befinden?
- 29. Wie XIB-Datei als initialViewController festlegen?
- 30. Wie man Controller-Methoden aufbricht?
Danke, Jon, das ist hilfreiche Informationen. Ich möchte immer noch die Strategie ausprobieren, niemals Controller auf der IB-Seite zu haben. Würdest du zustimmen, dass es machbar ist? Ich suche immer noch nach Codebeispielen ... – bedouger
Alles ist machbar. Aber ich würde den oben aufgeführten Ansatz empfehlen. Erstellen Sie statische Controller in der Datei MainWindow.xib und erstellen Sie die meisten (normalerweise alle) anderen Controller im Code als Reaktion auf Benutzeraktionen. –