Je veux lister toutes les vues secondaires dans un contrôleur uiview. J'ai essayé self.view.subviews, mais aucune des sous-vues ne sont répertoriées, par exemple, les sous-vues de la uitableviewcell ne sont pas trouvées. Une idée ?
Merci.
Je veux lister toutes les vues secondaires dans un contrôleur uiview. J'ai essayé self.view.subviews, mais aucune des sous-vues ne sont répertoriées, par exemple, les sous-vues de la uitableviewcell ne sont pas trouvées. Une idée ?
Merci.
Vous devez itérer récursivement les sous-vues.
- (void)listSubviewsOfView:(UIView *)view {
// Get the subviews of the view
NSArray *subviews = [view subviews];
// Return if there are no subviews
if ([subviews count] == 0) return; // COUNT CHECK LINE
for (UIView *subview in subviews) {
// Do what you want to do with the subview
NSLog(@"%@", subview);
// List the subviews of subview
[self listSubviewsOfView:subview];
}
}
Comme l'a commenté @Greg Meletic, vous pouvez ignorer la ligne COUNT CHECK LINE ci-dessus.
La méthode intégrée de xcode / gdb pour vider la hiérarchie des vues est utile - recursiveDescription, selon http://developer.apple.com/library/ios/#technotes/tn2239/_index.html
Il génère une hiérarchie de vues plus complète qui pourrait vous être utile:
> po [_myToolbar recursiveDescription]
<UIToolbarButton: 0xd866040; frame = (152 0; 15 44); opaque = NO; layer = <CALayer: 0xd864230>>
| <UISwappableImageView: 0xd8660f0; frame = (0 0; 0 0); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xd86a160>>
Vous devez imprimer de manière récursive, cette méthode comporte également des onglets basés sur la profondeur de la vue.
-(void) printAllChildrenOfView:(UIView*) node depth:(int) d
{
//Tabs are just for formatting
NSString *tabs = @"";
for (int i = 0; i < d; i++)
{
tabs = [tabs stringByAppendingFormat:@"\t"];
}
NSLog(@"%@%@", tabs, node);
d++; //Increment the depth
for (UIView *child in node.subviews)
{
[self printAllChildrenOfView:child depth:d];
}
}
Voici la version rapide
func listSubviewsOfView(view:UIView){
// Get the subviews of the view
var subviews = view.subviews
// Return if there are no subviews
if subviews.count == 0 {
return
}
for subview : AnyObject in subviews{
// Do what you want to do with the subview
println(subview)
// List the subviews of subview
listSubviewsOfView(subview as UIView)
}
}
Je suis un peu en retard à la fête, mais une solution un peu plus générale:
@implementation UIView (childViews)
- (NSArray*) allSubviews {
__block NSArray* allSubviews = [NSArray arrayWithObject:self];
[self.subviews enumerateObjectsUsingBlock:^( UIView* view, NSUInteger idx, BOOL*stop) {
allSubviews = [allSubviews arrayByAddingObjectsFromArray:[view allSubviews]];
}];
return allSubviews;
}
@end
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.