主 XIB 没有显示?

Posted

技术标签:

【中文标题】主 XIB 没有显示?【英文标题】:Main XIB not showing? 【发布时间】:2011-10-09 04:20:04 【问题描述】:

我目前的主要 XIB 有问题。

我使用的是 ios 5 Beta 7,所以这应该不是问题。无论如何,这就是我在应用程序委托中显示主视图的方式:

.h

UIWindow *window;
Game3ViewController *viewController;

@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) Game3ViewController *viewController;

.m

@synthesize window = _window;
@synthesize viewController = _viewController;

在applicationDidFinishLaunching方法中:

//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[Game3ViewController alloc] initWithNibName:@"Game3ViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;

然后是dealloc:

- (void)dealloc 
    [_window release];
    [_viewController release];
    [super dealloc];

问题是我不确定我现在是否应该在 MainWindow.XIB 中做某事,是吗?我认为这段代码会为我做所有事情,但是当我加载应用程序时我看到的只是一个白色窗口。我应该在 MainWindow.xib 中连接我的主视图吗?

无论如何,如果您在 Xcode Beta 7 中查看 Xcode 的单视图应用程序的默认模板,您会发现 甚至没有 MainWindow.xib,这就是我感到困惑的原因. 我将如何解决这个问题?

谢谢!

【问题讨论】:

【参考方案1】:

创建单视图应用程序时,它将创建 2 个 .xib。一个是 MainWindow.xib,另一个是 ViewController.xib。 默认情况下,您不必触摸您的 App 委托,因为两个 nib 已经链接。

但是,如果您想通过选择基于窗口的模板从头开始,您必须稍后创建自己的视图控制器。然后要将视图控制器添加到窗口,您需要在 applicationDidFinishLaunching 方法中完成所有操作:

// Override point for customization after application launch.
self.viewController = [[[Game3ViewController alloc] initWithNibName:@"Game3ViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;

我的意思是您需要删除分配窗口的第一行。 MainWindow.xib 已经为您完成了。

【讨论】:

第一部分不适用于 iOS 5。它只有一个 XIB,即视图控制器,我没有看到任何 MainWindow.XIB。编辑:我删除了分配 UIWindow 的第一行,它仍然没有显示我的视图控制器,但它现在在控制台中说:应用程序在应用程序启动结束时应该有一个根视图控制器编辑我的代码以反映我当前的状态 如何消除这一行 self.viewController = [[[Game3ViewController alloc] initWithNibName:@"Game3ViewController" bundle:nil] autorelease];然后在 Interface Builder 中添加 View Controller 我还应该删除 UIWindow 分配行吗?我还应该让我的 UIWindow 和 View Controller 成为一个 IBOutlet,然后在 mainwindow.xib 中连接它吗? 啊,是的,对不起,我错过了那部分。如果你在 Interface Builder 中设置 UIWindow 和 ViewController 都应该是 IBOutlets。 但是我有一个问题...您是否使用了基于窗口的模板?甚至该模板也已经将 UIWindow 作为 IBOutlet。所以我很困惑为什么你以前没有它。

以上是关于主 XIB 没有显示?的主要内容,如果未能解决你的问题,请参考以下文章

xib 中的景观主窗口

如何从 xib 文件加载和显示窗口

使用 UIScrollview 将 .xib 显示为不同的页面?

如何在 MacOS 中正确显示 xib 文件的模态视图?

使用 pushViewController 时没有 Xib 的 UIViewController 显示空白

awakeFromNib 没有调用但显示 xib