IBOutletCollection legt die Reihenfolge in Interface Builder fest
Ich bin mit IBOutletCollections Gruppe mehrere Instanzen von ähnlichen UI-Elemente. Insbesondere der I-Gruppe eine Reihe von UIButtons (die sind ähnlich wie Summer in einem quiz) und einer Gruppe von UILabels (die Anzeige der Partitur). Ich möchte sicherstellen, dass das Etikett direkt über die-Taste der Punktestand aktualisiert. Ich dachte mir, dass es am einfachsten ist, auf Sie zuzugreifen, die durch den index. Leider, auch wenn ich Sie in der gleichen Reihenfolge, Sie haben nicht immer die gleichen Indizes. Gibt es eine Möglichkeit, die im Interface Builder, um die richtige Bestellung.
InformationsquelleAutor der Frage gebirgsbärbel | 2011-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: Mehrere Kommentatoren haben behauptet, dass neuere Versionen von Xcode zurück
IBOutletCollections
in der Reihenfolge in der die verbindungen hergestellt sind. Andere haben behauptet, dass dieser Ansatz nicht für Sie arbeiten auf storyboards. Ich habe noch nicht getestet, mich aber, wenn Sie bereit sind, verlassen Sie sich auf undokumentierte Verhalten, dann können Sie feststellen, dass die explizite Sortierung habe ich vorgeschlagen, unten ist nicht mehr notwendig.Leider, es scheint nicht zu irgendeiner Weise zu Steuern, die Reihenfolge der
IBOutletCollection
im IB, also müssen Sie Sie Sortieren das array, nachdem es geladen wurde, basiert auf einer Eigenschaft des views. So Sortieren Sie die Ansichten, die basierend auf Ihrentag
Eigentum, aber die manuelle Einstellung von tags in IB, kann ziemlich mühsam.Glücklicherweise neigen wir dazu zu legen, unsere Ansichten in der Reihenfolge wollen wir Ihnen den Zugang, so ist es oft ausreichend, Sortieren das array basierend auf der x-oder y-position wie dieser:
InformationsquelleAutor der Antwort cduhn
Lief ich mit cduhn Antwort und machte diese NSArray Kategorie.
Wenn nun xcode wirklich bewahrt die design-Zeit, um diesen code nicht wirklich nötig, aber wenn Sie finden, sich selbst zu erstellen/neu erstellen großen Sammlungen in IB und wollen nicht sorgen zu machen, vermasselt das könnte helfen (während der Laufzeit). Auch ein Hinweis: wahrscheinlich die Reihenfolge, in der die Objekte wurden der Sammlung Hinzugefügt hatte etwas zu tun mit dem "Objekt-ID" finden Sie im Identity Inspector die Registerkarte, die sporadisch beim Bearbeiten der Oberfläche und der Einführung von neuen Objekten zu der Auflistung zu einem späteren Zeitpunkt.
.h
.m
Dann schließen Sie die Headerdatei, als Sie beschlossen, nennen Sie es, und Sie können den code:
InformationsquelleAutor der Antwort Ivan Dossev
Nicht sicher, wenn dies änderte sich exakt, aber als Xcode 4.2 zumindest, dies nicht mehr scheint ein problem zu sein. IBOutletCollections nun die Erhaltung der Reihenfolge, in der die Ansichten wurden Hinzugefügt, die im Interface Builder.
UPDATE:
Machte ich ein test-Projekt, um zu überprüfen, dass dies der Fall ist: IBOutletCollectionTest
InformationsquelleAutor der Antwort Nick Lockwood
Nicht so weit wie ich informiert bin.
Als workaround, konnte Sie weisen Sie jeder von Ihnen einen tag, der Reihe nach. Die Tasten Reichweite 100, 101, 102, etc. und die Etiketten, 200, 201, 202, usw. Dann fügen Sie 100 bis der Schaltfläche Tags, um seine entsprechenden label-tag. Sie können dann die Beschriftung mithilfe
viewForTag:
.Alternativ könnten Sie die entsprechenden Objekte in Ihrer eigenen
UIView
so dass Sie nur noch einen Knopf und ein label-per-view.InformationsquelleAutor der Antwort Jim
Fand ich, dass Xcode sortiert die Auflistung alphabetisch mit der ID der Verbindung.
Wenn Sie öffnen Sie die editor version auf Ihre nib-Datei können Sie ganz einfach Bearbeiten Sie die id ' s (machen Sie sicher, dass Sie eindeutig sind, ansonsten Xcode stürzt ab).
Hilft es, wenn Sie zuerst um Ihr Objekt manuell in das Dokument Umriss des IB, so dass Sie zeigen, bis in der Folge, in der der xml-code.
InformationsquelleAutor der Antwort massimobio
Es scheint sehr zufällig, wie IBOutletCollection bestellt ist. Vielleicht bin ich nicht zu verstehen, Nick Lockwood die Methodik korrekt - aber ich machte auch ein neues Projekt, eine Reihe von UILabels, und Verband Sie zu einer Auflistung in der Reihenfolge, wie Sie Hinzugefügt wurden, um die Ansicht.
Nach der Anmeldung bekam ich eine zufällige Reihenfolge. Es war sehr frustrierend.
Mein workaround war die Einstellung tags in IB und Sortieren dann die Sammlungen etwa so:
Hier, resultRow1 ist ein IBOutletCollection von etwa 7-Etiketten, - tags gesetzt, IB. Hier ist die Methode "sort":
Dabei, ich kann jetzt den Zugriff auf Objekte durch die Verwendung
[resultRow1 objectAtIndex: i]
oder so. Das spart Aufwand für die Iteration durch und Vergleiche tags jedes mal, wenn ich brauche, um den Zugriff auf ein element.InformationsquelleAutor der Antwort bgoers
Brauchte ich diese Bestellung für eine Sammlung von UITextField-Objekte für das setting, in dem die "Next" - Taste auf der Tastatur führen würde (Tab-Feld). Dies ist eine internationale app, so wollte ich die Sprache, die Richtung zu mehrdeutig sein.
.h
.m
Nutzung (nach dem layout)
InformationsquelleAutor der Antwort David Robles
Hier ist eine Erweiterung, die ich erstellt
Array<UIView>
zu Sortierentag
z.B. nützlich bei der Arbeit w/IBOutletCollection
s.InformationsquelleAutor der Antwort Scott Gardner