Я совсем новичок в программировании iOS..
На данный момент меня интересует следующая проблема. в AppDelegate.m в функции didFinishLaunchingWithOptions:(...) я пытался пройтись по визуальному дереву, например (Примечание: основная раскадровка имеет TabBarController, а в начальном представлении есть одна кнопка.
UIView *sv;
sv=[window subviews];
for(sv in mwSubViews){
NSLog(@"Subview's %d Description : %@ \n",i++,[sv description]);
NSLog(@"Views Bounds: %@ :\n",sv.bounds);
NSLog(@"Views Frame: %@ :\n",sv.frame);
}
Я использую одну раскадровку с некоторыми вещами на ней. Когда я делаю это в ViewController, управляющем элементом из раскадровки, его вывод
ViewsAnimationTouchDrawing[59046:f803] Subview's 0 Description : > 2012-04-16 20:32:48.362 ViewsAnimationTouchDrawing[59046:f803] Views Bounds: (null) : 2012-04-16 20:32:48.363 ViewsAnimationTouchDrawing[59046 Кадр просмотров: (нулевой) :
Мэй с.о. будьте так любезны, объясните мне, почему? (я думал, что окно уже инициализировано и на нем есть UIView..)
**Обновлять
В настоящее время я читаю книгу о Window View Hierarchy. Автор говорит, что обычно существует один экземпляр класса UIWindow. Делегат из UIApplication содержит ссылку на него. Я немного поиграл с файлами .xib в своем приложении. Если я вручную загружаю окно из файла xib, назначаю его в делегате ссылке на окно, я могу получить ссылку на окно с помощью
UIWindow *mw = [[UIApplication sharedApplication] keyWindow];
Я могу спуститься по визуальному дереву с функцией
-(void) runDownSubViewsWithCavemanDebug : (UIView*) view{
NSArray *mwSubViews = [view subviews];
static int i=0;
if([mwSubViews count]==0) return;
UIView *sv;
for(sv in mwSubViews){
NSLog(@"Subview's %d Description : %@ \n",i++,[sv description]);
NSLog(@"Views Bounds: %@ :\n",sv.bounds);
NSLog(@"Views Frame: %@ :\n",sv.frame);
[self runDownSubViewsWithCavemanDebug:sv];
}
}
(Вызов функции в didFinishLaunchingWithOptions)
MainViewController *myMainVC = [[MainViewController alloc] init];
NSArray *bundleResources = [[NSBundle mainBundle]loadNibNamed:@"View" owner:myMainVC options:nil];
UIWindow *mainWindow = [bundleResources objectAtIndex:0];
self.window = mainWindow;
self.window.rootViewController = myMainVC;
Однако, если я использую раскадровку, я не могу получить ссылку на окно с помощью .. keyWindow. я могу получить это с
UIWindow *realmw = [[[UIApplication sharedApplication]delegate] window];
Я получаю ссылку на окно, но окно (хотя я думал, что оно должно быть инициализировано) не имеет элементов в своем подвиде.
Да, я думаю, мне просто интересно об этом. Apple как-то разбила иерархию представлений в раскадровках?