加载了 Xib 文件但没有出现

Posted

技术标签:

【中文标题】加载了 Xib 文件但没有出现【英文标题】:Loaded Xib file but nothing appears 【发布时间】:2014-09-26 18:55:07 【问题描述】:

我刚开始学习 Objective-C,在加载视图(直接)到使用 XIB 作为 rootViewController 之间的转换时遇到了问题。目前我正在尝试将我的 xib 文件加载到视图控制器对象中。虽然它编译没有任何问题,但我的模拟器出现空白(基本界面、时间和电池电量计除外)。我还确保将我的 XIB 设置为 BNRReminderViewController 类并设置视图和相应的按钮/对象。 (我还将我的类 BNRReminderViewController.h 导入到我的 .m 文件中)

下面是我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

    NSBundle *appBundle = [NSBundle mainBundle];

    BNRReminderViewController *rvc = [[BNRReminderViewController alloc] initWithNibName:@"BNRReminderViewController" bundle:appBundle];

    self.window.rootViewController = rvc;

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

    return YES;

我认为正在发生的事情是我的 BNRReminderViewController.xib 文件不在 mainBundle 中,所以当我使用 NSBundle 对象初始化时,什么都没有加载,这就是我得到空白屏幕的原因。我是 Objective-C 的新手,所以我真的不知道如何处理这个问题,因为许多其他语言只是导入一个 .h 或直接读取文件。请帮忙。

【问题讨论】:

【参考方案1】:

您可以使用 rjstellings 代码 here 检查您对 NSBundle 的假设是否正确。

但是,如果您至少使用 Xcode 5.0.1,那么您应该可以不指定捆绑包名称。此外,由于您的 ViewController 类似乎与 xib 具有相同的名称,因此 Xcode 足够聪明,可以让您无需指定它。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    BNRReminderViewController *rvc = [[BNRReminderViewController alloc] init];
    [self.window setRootViewController:rvc];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;

【讨论】:

【参考方案2】:

您不必调用 mainBundle。可能为零。此代码可能是解决方案:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        self.dashboardVC = [[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:nil];

        UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:self.dashboardVC];

        self.window.rootViewController = nc;

        [self.window makeKeyAndVisible];
        return YES; 

否则,您是否使用 Storyboard 创建应用程序?如果从 Storyboard 开始,则必须删除以下行:

【讨论】:

以上是关于加载了 Xib 文件但没有出现的主要内容,如果未能解决你的问题,请参考以下文章

如何使用一个 ViewController 文件加载横向 xib?

为 UITableViewCell 加载自定义 XIB

如何在swift中按下按钮从另一个xib文件加载另一个xib文件

Xcode Interface Builder加载XIB文件显示具有透明度的视图

我更改了 xib 文件,但视图没有更新

iPhone - 预加载 xib