Я должен осмотреть иерархию представления на программе iPhone

Как я определяю что структура представления на моей программе iPhone при работе средства моделирования?

22
задан Chris 26 February 2010 в 16:51
поделиться

2 ответа

По аналогии с тем, что предлагает Янник, у Эрики Садун есть код здесь, который довольно красиво печатает иерархию представления (с информацией о классе и фрейме). Вы можете сделать это в категории UIView со следующим интерфейсом:

#import <UIKit/UIKit.h>

@interface UIView (ExploreViews)

- (void)exploreViewAtLevel:(int)level;

@end

и реализацией:

#import "UIView+ExploreViews.h"

void doLog(int level, id formatstring,...)
{
    int i;
    for (i = 0; i < level; i++) printf("    ");

    va_list arglist;
    if (formatstring)
    {
        va_start(arglist, formatstring);
        id outstring = [[NSString alloc] initWithFormat:formatstring arguments:arglist];
        fprintf(stderr, "%s\n", [outstring UTF8String]);
        va_end(arglist);
    }
}

@implementation UIView (ExploreViews)

- (void)exploreViewAtLevel:(int)level;
{
    doLog(level, @"%@", [[self class] description]);
    doLog(level, @"%@", NSStringFromCGRect([self frame]));
    for (UIView *subview in [self subviews])
        [subview exploreViewAtLevel:(level + 1)];
}

@end
10
ответ дан 29 November 2019 в 03:18
поделиться

вы можете использовать такой алгоритм:

-(void)inspectView:(UIView *)aView level:(NSString *)level {
    NSLog(@"Level:%@", level);
    NSLog(@"View:%@", aView);

    NSArray *arr = [aView subviews];
    for (int i=0;i<[arr count];i++) {
        [self inspectView:[arr objectAtIndex:i]
          level:[NSString stringWithFormat:@"%@/%d", level, i]];
    }
}

И добавить эту строку в viewDidLoad, например:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self inspectView:self.viewControllers level:@""];
}

источник: иерархия представления

3
ответ дан 29 November 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: