Wie listet man alle Subviews in einem uiviewcontroller in iOS auf?
Möchte ich Liste alle Unteransichten in einem UIViewController
. Ich habe versucht self.view.subviews
aber nicht alle Untersichten sind aufgelistet, zum Beispiel, die Untersichten in den UITableViewCell
sind nicht zu finden. Irgendeine Idee?
InformationsquelleAutor der Frage user403015 | 2011-08-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie rekursiv Durchlaufen der sub Aussicht.
Als kommentiert von @Greg Meletic, können Sie überspringen die ZÄHLUNG ÜBERPRÜFEN Sie in der ZEILE darüber.
InformationsquelleAutor der Antwort EmptyStack
Xcode/gdb integrierte Methode, um einen dump der view Hierarchie ist nützlich -- recursiveDescription, pro http://developer.apple.com/library/ios/#technotes/tn2239/_index.html
Gibt es eine umfassende übersicht Hierarchie, die Sie vielleicht nützlich finden:
InformationsquelleAutor der Antwort natbro
Drucken Sie rekursiv, diese Methode auch Tabulatoren, basierend auf die Tiefe der Ansicht
InformationsquelleAutor der Antwort James Webster
Hier ist der swift-version
InformationsquelleAutor der Antwort Arkader
Ich bin ein bisschen spät zur party, aber ein bisschen mehr Allgemeine Lösung:
InformationsquelleAutor der Antwort Gordon Dove
Nutze ich diesen Weg:
in der UIViewController.
InformationsquelleAutor der Antwort Graphite
Elegante rekursive Lösung in Swift:
Können Sie anrufen subviewsRecursive() auf jede UIView:
InformationsquelleAutor der Antwort Alex
Den Grund, die Untersichten in einer UITableViewCell nicht gedruckt ist, weil Sie müssen ausgeben alle Untersichten in der oberen Ebene. Die subviews der Zelle sind nicht die direkte subviews Ihrer Ansicht.
Um die UITableViewCell ' s Untersichten, die Sie benötigen, um zu bestimmen, die die Untersichten gehören zu einer UITableViewCell (mit
isKindOfClass:
) in die print-Schleife und dann in einer Schleife durch, es ist UntersichtenEdit: Dieser blog-post auf Einfach UIView-Debugging kann möglicherweise helfen
InformationsquelleAutor der Antwort Suhail Patel
Schrieb ich eine Kategorie, um eine Liste aller Ansichten, gehalten von einem view controller, die inspiriert durch die Antworten vor.
Liste aller Ansichten, gehalten von einem view controller, nur
NSLog("%@",[self listOfSubviews])
dieself
bedeutet, dass die view-controller selbst. Obwohl es nicht beenden effizient.Plus, können Sie
NSLog(@"\n%@", [(id)self.view performSelector:@selector(recursiveDescription)]);
zu tun, die gleiche Sache, und ich denke, es ist effizienter als meine Implementierung.InformationsquelleAutor der Antwort WeZZard
Einfachen Swift-Beispiel:
InformationsquelleAutor der Antwort inVINCEable
In meinem Weg, UIView der Kategorie oder Erweiterung ist viel besser als andere
und rekursive ist der entscheidende Punkt, um alle Untersichten
erfahren Sie mehr:
https://github.com/ZhipingYang/XYDebugView
Objective-C
Beispiel
Swift 3.1
Beispiel
direkt, verwenden Sie Sequenz - Funktion, um alle Untersichten
InformationsquelleAutor der Antwort Zhiping Yang
Details
xCode Version 9.0.1, Swift 4
Lösung
Nutzung
Ergebnis
InformationsquelleAutor der Antwort Vasily Bodnarchuk
Wenn alle Sie wollen, ist ein array von
UIView
s, dies ist ein Einzeiler-Lösung (Swift 4+):InformationsquelleAutor der Antwort Federico Zanetello
Könnten Sie versuchen, ein schickes array trick, wie:
[self.view.subviews makeObjectsPerformSelector: @selector(printAllChildrenOfView)];
Nur eine Zeile code. Natürlich müssen Sie möglicherweise passen Sie Ihre Methode
printAllChildrenOfView
sich nicht nehmen, alle Parameter oder eine neue Methode.InformationsquelleAutor der Antwort johnbakers
Swift 2.0 kompatibel
Hier eine rekursive Methode ruft alle Unteransichten einer generischen view:
So können Sie rufen Sie überall in dieser Weise:
InformationsquelleAutor der Antwort Luca Davanzo
Dies ein umschreiben der diese Antwort:
Müssen Sie zuerst den Zeiger/Referenz auf das Objekt, das Sie ausdrucken wollen alle seine subviews. Manchmal können Sie finden es einfacher, zu finden, dass das Objekt durch den Zugriff auf Sie durch die Untersicht. Wie
po someSubview.superview
. Dies wird Ihnen etwas wie:superview
0x7f91747c71f0
ist der Zeiger auf die superview.drucken superView, müssen Sie Haltepunkte setzen.
Jetzt, diesen Schritt zu tun, Sie konnte nur klicken Sie auf den "view debug-Hierarchie'. Kein Bedarf für Haltepunkte
Dann können Sie einfach tun:
was für mich kehrte etwas wie:
als Sie müssen schon erraten haben, mein superview hat 4 Untersichten:
Dies ist ziemlich neu für mich, aber hat mir geholfen, Debuggen, meine Ansichten' Bilder (und text und Text). Einer meiner Untersichten nicht zeigen, bis auf dem Bildschirm, so verwendet recursiveDescription und ich erkannte, dass die Breite meiner einer meiner Untersicht war
0
... also ging ich korrigiert seine Einschränkungen und die Untersicht wurde, erscheinen.InformationsquelleAutor der Antwort Honey
Alternativ, wenn Sie wollten, zu geben ein array zurück, der alle Untersichten (und verschachtelt-Untersichten) von einem UIView-Erweiterung:
InformationsquelleAutor der Antwort Adam Johns
Kürzeste Lösung
Ergebnis
Hinweise
InformationsquelleAutor der Antwort Suragch
C# Xamarin-version:
Alternativ, wenn Sie möchten, um herauszufinden, alle Unteransichten einer bestimmten Art, die ich benutze:
InformationsquelleAutor der Antwort Craig Champion
Habe ich es geschafft, in einer Kategorie
UIView
rufen Sie einfach die Funktion übergeben wird der index zu drucken, Sie mit einem schönen Baum-format. Dies ist nur eine weitere Möglichkeit, die Antwort gepostet von James Webster.Ich hoffe, es hilft 🙂
InformationsquelleAutor der Antwort NorthBlast
InformationsquelleAutor der Antwort sarra srairi
selbst.Blick.Untersichten erhalten die bietet der Blick.Um Untersichten von uitableviewcell Sie etwas zu tun haben wie unten.
InformationsquelleAutor der Antwort Hitesh