iphone - UIWindow 没有任何 subview

标签 iphone ios ipad view hierarchy

我想了解 iOS 应用程序中的 View 层次结构,因此我使用 XCode 4.6 制作了一个单一 View 应用程序。它会自动创建一个应用委托(delegate)和一个 View Controller 。这是应用程序委托(delegate)的相关部分:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[MBIViewController alloc] initWithNibName:@"MBIViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

因此,它初始化一个窗口,然后设置窗口的 Root View Controller 。由于 UIWindow 是一个 UIView,并且 UIView 具有 subviews 属性,我预计 Root View Controller 的 View 将是我的应用程序窗口的 subview 。所以我在这个 Root View Controller 的方法中检查了它:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIWindow *currentWindow = [[[UIApplication sharedApplication] delegate] window];    
    NSLog(@"Subview count of current window: %d", currentWindow.subviews.count);
    NSLog(@"Superview of root view controller's view: %@", self.view.superview);
}

奇怪的是输出是:

Subview count of current window: 0
Superview of root view controller's view: (null)

我假设主窗口将是 View 层次结构中最顶层的 View ,所有内容都是它的 subview 。然而,根据我的小实验,似乎有这个主窗口和 Root View Controller 的 View 都位于 View 层次结构的顶部,它们没有任何 subview /父 View 关系!谁能解释为什么我的 Root View Controller 的 View 不是主窗口的 subview ?谢谢

最佳答案

你的假设可能是对的,也可能是错的。问题出在你的测试上。

加载 View 时,内联调用 viewDidLoad。 View 在完成加载之前无法添加到父 View ,因此在调用 viewDidLoad 时不可能将其添加到父 View 。

尝试在 viewWillAppear: 中运行您的代码,因为您可以合理地预期届时 View 将具有父 View 。

关于iphone - UIWindow 没有任何 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001742/

相关文章:

iphone - 默认情况下在 MPMoviePlayerViewController 中显示字幕

ios - 如何为所有 ipad 和 iphone 创建通用 xib,而不为 iphone 和 ipad 创建单独的 xib?不是 Storyboard

ios - 是否可以在 iphone TableView 中创建 A-Z 以外的索引?

ios - 启动 UITableView 滚动到底部

iphone - 自定义字体在 iOS 上无法正确显示

ios - 重命名项目后,我找不到 <XCTest/XCTest.h>。

iphone - 如何修复 iOS 7 上的 UITableView 分隔符?

iPhone 开发者应用程序 : "Promo Codes" button in iTunes is missing

ios - 重新加载 TableView 以创建动态标签更改 iOS Swift

ios - 添加新建筑数据后发送推送通知