In komplexen Bildschirmen (View Controllern) habe ich das Ganze in kleinere Teile geteilt (ich nenne sie Widgets). Diese Widgets bestehen im Wesentlichen aus einer MyWidget.h
und einer MyWidget.m
Datei sowie einer MyWidget.xib
Datei, wobei UIView
das Stammelement a ist und die MyWidget-Klasse der Dateibesitzer der UIView ist. In der Init dieses Widgets mache ich eine loadNibNamed
.
In meinem View Controller mache ich dann eine [[MyWidget alloc] init]
, die ich als Unteransicht zur Hauptansicht von View Controller hinzufüge. Dies funktioniert bisher perfekt.
Ich frage mich jetzt, wie ich das gleiche mit Storyboard machen soll, weil ich nicht wirklich anfangen kann, UIView
irgendwo etwas hineinzuziehen, ich muss immer mit einem anfangen UIViewController
, was ich nicht will.
Wenn dies mit einem Storyboard nicht möglich ist, kann ich es einfach auf die alte Weise tun, indem ich das Storyboard für meine Hauptbildschirme und Segmente verwende und eine separate .xib-Datei verwende, um benutzerdefinierte Ansichten zu definieren?
quelle
xib
s für Ihre View Controller separat und nicht im Storyboard erstellen ?Antworten:
Das Einfügen des Widgets / der Ansicht in eine separate .xib-Datei funktioniert und ist insbesondere dann geeignet, wenn Sie dieselbe Ansicht von mehreren Ansichts-Controllern aus referenzieren möchten.
Manchmal möchten Sie jedoch die zusätzliche Ansicht / das zusätzliche Widget im selben Storyboard sehen, und dies ist möglich. So geht's:
Wählen Sie Ihren Ansichts-Controller in IB aus (klicken Sie auf den schwarzen Balken unter der Ansicht) und ziehen Sie eine UIView aus der Objektbibliothek in den schwarzen Balken:
Wenn sich eine Ansicht in der schwarzen Leiste befindet, wird sie wie jede andere Ansicht in IB instanziiert, jedoch erst dann zu Ihrer Ansichtshierarchie hinzugefügt, wenn Sie dies im Code tun. Ändern Sie die Klasse der Ansicht bei Bedarf entsprechend Ihrer eigenen Unterklasse:
Sie können es wie jede andere Ansicht an Ihren View Controller anschließen:
Die hinzugefügte Ansicht wird in Ihrer Dokumentübersicht angezeigt, und Sie können dort auch Aktionen und Referenzen verknüpfen:
Das verbleibende Problem besteht nun darin, dass Sie die Ansicht nicht sehen können, egal wie oft Sie versuchen, zu klicken oder zu doppelklicken, was den gesamten Zweck, sie in dasselbe Storyboard zu legen, zunichte machen würde. Glücklicherweise gibt es zwei Problemumgehungen, die mir bekannt sind.
Die erste Problemumgehung besteht darin, die Ansicht von der schwarzen Leiste zurück in die Ansicht Ihres Ansichtscontrollers zu ziehen, sie zu bearbeiten und sie dann wieder in die schwarze Leiste zu ziehen, wenn Sie fertig sind. Dies ist mühsam, aber zuverlässig.
Die andere Problemumgehung ist schwieriger, aber ich bevorzuge sie, weil ich so alle meine Ansichten gleichzeitig sehen kann:
Ziehen Sie eine UITableView aus der Objektbibliothek in Ihre neu hinzugefügte Ansicht.
Ziehen Sie dann eine UITableViewCell in diese UITableView.
Sobald Sie dies tun, wird Ihre Ansicht auf magische Weise nebeneinander angezeigt, aber Sie haben eine UITableView, die Sie nicht möchten. Sie können die Größe entweder auf 0x0 ändern oder sie löschen, und Ihr UIView bleibt (normalerweise) weiterhin sichtbar.
Gelegentlich wird die sekundäre Ansicht in IB wieder ausgeblendet. Sie können die obigen Schritte wiederholen, wenn Sie die UITableView gelöscht haben oder wenn sich die UITableView noch in der Hierarchie befindet. Klicken Sie einfach auf die UITableViewCell, und die Ansicht wird erneut angezeigt.
Die zweite Methode funktioniert für UIViews, aber nicht so gut für UIToolbars und ist für UIButtons nicht möglich. Die sauberste Lösung, die ich gefunden habe, wenn Sie viele verschiedene Unteransichten einschließen müssen, besteht darin, eine einzelne sekundäre UIView als Container an Ihren View Controller anzuhängen wird nie angezeigt, fügen Sie alle Ihre sekundären Ansichten dort ein und verwenden Sie den UITableViewCell-Trick, um alles sichtbar zu machen. Ich ändere die Größe meines Dummy-UITableView auf 0x0, um dies unsichtbar zu machen. Hier ist ein Screenshot, wie alles zusammen aussieht:
quelle
Wenn Sie Ihre View Controller nur an einen anderen Ort (und nicht in Ihr Storyboard) bringen möchten, gibt es einen ziemlich einfachen Weg, dies zu erreichen:
1) Erstellen Sie Ihre
CustomViewController
s (abcdController
in dem Code, den ich ausprobiert habe)xib
wie gewohnt mit ihren individuellen s.2) Fügen Sie dem Storyboard eine
UIViewController
(oder was auch immer Ihre Oberklasse warCustomViewController
) hinzu.3) Setzen Sie die CustomClass auf
CustomViewController
anstattUIViewController
wie hier gezeigt:4)
viewDidLoad
Ladenxib
Sie abschließend den Benutzerdefinierten und fertig.quelle
loadNibNamed
in diesem FallIch denke, Sie können so etwas tun, um eine Instanz eines bestimmten Viewcontrollers aus dem Storyboard abzurufen und die Ansicht darüber zu verwenden.
Hoffe das hilft
Danke Vijay
quelle