Ich möchte alle Unteransichten in a auflisten UIViewController
. Ich habe es versucht self.view.subviews
, aber nicht alle Unteransichten werden aufgelistet, zum Beispiel werden die Unteransichten in der UITableViewCell
nicht gefunden. Irgendeine Idee?
ios
uiview
subview
uiview-hierarchy
user403015
quelle
quelle
Antworten:
Sie müssen die Unteransichten rekursiv iterieren.
Wie von @Greg Meletic kommentiert, können Sie die COUNT CHECK LINE oben überspringen.
quelle
recursiveDescription
Sie bitteDie in xcode / gdb integrierte Methode zum Speichern der Ansichtshierarchie ist nützlich - recursiveDescription ( http://developer.apple.com/library/ios/#technotes/tn2239/_index.html)
Es gibt eine vollständigere Ansichtshierarchie aus, die Sie möglicherweise nützlich finden:
quelle
[_myToolbar recursiveDescription]
in meinen Code oder anderswo setzen?Elegante rekursive Lösung in Swift:
Sie können subviewsRecursive () in jedem UIView aufrufen:
quelle
Sie müssen rekursiv drucken, diese Methode auch Registerkarten basierend auf der Tiefe der Ansicht
quelle
Hier ist die schnelle Version
quelle
Ich bin ein bisschen zu spät zur Party, aber eine etwas allgemeinere Lösung:
quelle
Wenn Sie nur ein Array von
UIView
s wünschen, ist dies eine Einzeiler-Lösung ( Swift 4+ ):quelle
Ich benutze diesen Weg:
im UIViewController.
quelle
Einzelheiten
Lösung
Verwendung
Ergebnis
quelle
In meiner Hinsicht ist die Kategorie oder Erweiterung von UIView viel besser als andere und rekursiv ist der entscheidende Punkt, um alle Unteransichten zu erhalten
Mehr erfahren:
https://github.com/ZhipingYang/XYDebugView
Ziel c
Beispiel
Swift 3.1
Beispiel
Verwenden Sie direkt die Sequenzfunktion , um alle Unteransichten abzurufen
quelle
Der Grund, warum die Unteransichten in einer UITableViewCell nicht gedruckt werden, liegt darin, dass Sie alle Unteransichten in der obersten Ebene ausgeben müssen. Die Unteransichten der Zelle sind nicht die direkten Unteransichten Ihrer Ansicht.
Um die Unteransichten der UITableViewCell abzurufen, müssen Sie ermitteln, welche Unteransichten zu einer UITableViewCell gehören (mithilfe von
isKindOfClass:
) in Ihrer Druckschleife gehören, und dann die Unteransichten durchlaufenBearbeiten: Dieser Blog-Beitrag zu Easy UIView Debugging kann möglicherweise hilfreich sein
quelle
Ich habe eine Kategorie geschrieben, um alle Ansichten eines View Controllers aufzulisten, die von den zuvor veröffentlichten Antworten inspiriert wurden.
Um alle Ansichten durch einen View - Controller gehalten, gerade
NSLog("%@",[self listOfSubviews])
, wasself
bedeutet , die View - Controller selbst. Obwohl es nicht sehr effizient ist.Außerdem können Sie
NSLog(@"\n%@", [(id)self.view performSelector:@selector(recursiveDescription)]);
das Gleiche tun, und ich denke, es ist effizienter als meine Implementierung.quelle
Einfaches Swift-Beispiel:
quelle
Sie könnten einen ausgefallenen Array-Trick ausprobieren, wie:
[self.view.subviews makeObjectsPerformSelector: @selector(printAllChildrenOfView)];
Nur eine Codezeile. Natürlich müssen Sie möglicherweise Ihre Methode anpassen
printAllChildrenOfView
, um keine Parameter zu übernehmen oder eine neue Methode zu erstellen.quelle
Swift 2.0 kompatibel
Hier eine rekursive Methode, um alle Unteransichten einer generischen Ansicht zu erhalten:
So können Sie überall anrufen:
quelle
Kürzeste Lösung
Ergebnis
Anmerkungen
quelle
Dies ist eine Umschreibung dieser Antwort:
Sie müssen zuerst den Zeiger / Verweis auf das Objekt erhalten, mit dem Sie alle Unteransichten drucken möchten. Manchmal fällt es Ihnen leichter, dieses Objekt zu finden, indem Sie über seine Unteransicht darauf zugreifen. Wie
po someSubview.superview
. Dies gibt Ihnen so etwas wie:superview
0x7f91747c71f0
ist der Zeiger auf die Übersicht.Um die SuperView zu drucken, müssen Sie Haltepunkte verwenden.
Um diesen Schritt auszuführen, klicken Sie einfach auf "Debug-Hierarchie anzeigen". Keine Haltepunkte erforderlich
Dann könnten Sie leicht tun:
was für mich so etwas wie zurückgegeben hat:
Wie Sie erraten haben müssen, hat meine Übersicht 4 Unteransichten:
Dies ist für mich ziemlich neu, hat mir jedoch geholfen, die Frames (und den Text und den Typ) meiner Ansichten zu debuggen. Eine meiner Unteransichten wurde nicht auf dem Bildschirm angezeigt, daher wurde recursiveDescription verwendet, und mir wurde klar, dass die Breite meiner Unteransichten
0
... war. Daher habe ich die Einschränkungen korrigiert und die Unteransicht wurde angezeigt.quelle
Alternativ, wenn Sie ein Array aller Unteransichten (und verschachtelten Unteransichten) von einer UIView-Erweiterung zurückgeben möchten:
quelle
AC # Xamarin-Version:
Wenn Sie alternativ alle Unteransichten eines bestimmten Typs finden möchten, den ich verwende:
quelle
Ich habe es in einer Kategorie gemacht, in der ich
UIView
einfach die Funktion aufrufe, die den Index übergibt, um sie mit einem schönen Baumformat zu drucken. Dies ist nur eine weitere Option der Antwort von James Webster .Ich hoffe, es hilft :)
quelle
quelle
self.view.subviews behalten die Hierarchie der Ansichten bei. Um Unteransichten von uitableviewcell zu erhalten, müssen Sie wie folgt vorgehen.
quelle