我对 iOs 编程很陌生..
目前我想知道以下问题。在函数 didFinishLaunchingWithOptions:(...) 中的 AppDelegate.m 中,我试图沿着可视化树向下走(注意:mainstoryboard 有一个 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:f80TouchDrawing]视图框架:(空):
可以这么好解释我,为什么?(我认为窗口已经初始化并且上面有一个 UIView ..)
**更新
我目前正在阅读一本关于 Window View Hierarchy 的书。作者说通常有一个 UIWindow 类的实例。UIApplication 的委托持有对它的引用。我在我的应用程序中使用了一些 .xib 文件。如果我从 xib 文件手动加载窗口,在委托中将其分配给窗口引用,我可以使用以下命令获取对窗口的引用
UIWindow *mw = [[UIApplication sharedApplication] keyWindow];
我可以使用 Function 沿着可视化树向下走
-(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 是否以某种方式打破了情节提要中的视图层次结构?