【问题标题】:Objective-C: Help - my xib won't show?Objective-C:帮助 - 我的 xib 不会显示?
【发布时间】:2011-09-15 21:40:36
【问题描述】:

我有以下 Objective-C 代码:

MainMenu *main= [[MainMenu alloc] initWithNibName:nil bundle:nil];
[[self navigationController]pushViewController:main animated:YES];
NSLog(@"hello");

我有一个名为“MainMenu”的类,带有相应的头文件和 xib 文件。无论我做什么,它都不会显示。由于 NSLog('hello'),我已经确认代码达到上述要求。

我已经把头发拔了好几个小时了,我根本无法深入了解它。

希望有人能帮忙


编辑 - 仍有问题...

以下是我的项目设置的一些屏幕截图:


好的,所以我尝试了这个:

MainMenu *main= [[MainMenu alloc] initWithNibName:nil bundle:nil];
[[self navigationController]pushViewController:main animated:YES];
[self.view addSubview:main.view];

但是还是不行……

非常感谢,

【问题讨论】:

  • 您是否尝试过设置initWithNibName 参数?类似于(我假设)@"MainMenu".
  • 是什么导致导航控制器出现?表行选择?按钮按下? UIAlertView?
  • 您的MainWindow.xib 没有UINavigationController,只有UIViewController。开始一个使用UINavigationController 的新问题,看看如何正确设置你的MainWindow.xibAppDelegate

标签: iphone objective-c ios xib


【解决方案1】:

initWithNibName 为 nil 的事实不应该是问题,因为如果给它 nil,它会查找具有类的确切名称的 nib。

两件事:

1) 确保您最近运行过一次清理并确保正确加载了该文件。

2) 确保 navigationController 不为零,如果是,则需要确保制作导航控制器,如果您不打算使用导航控制器,请考虑使用:

- (void)presentModalViewController:(UIViewController *)modalViewController 
                          animated:(BOOL)animated

【讨论】:

    【解决方案2】:

    为什么要将nibName 设置为nil?如果笔尖的名字是MainMenu,那么你想要:

    MainMenu *main= [[MainMenu alloc] initWithNibName:@"MainMenu" bundle:nil];
    [self.navigationController pushViewController:main animated:YES];
    [main release];
    

    您确定您有UINavigationController 以便推送新视图吗?

    希望有帮助!

    【讨论】:

    • 试过 initWithNibName:@"MainMenu",但还是同样的问题。 Xib 根本不会显示
    • 明确地说,将 nibName 设置为 nil 是完全可以的;默认行为是查找名称与控制器类匹配的 nib。
    【解决方案3】:

    不要扯头发,仔细看看你的代码:你的 initWithNibName 中有 nil。什么 MainMenu 是 viewController 还是什么?并放置正确的笔尖让您打招呼。

    已按要求更新:

    MainMenu *main= (MainMenu *)[MainMenu alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:main];
    [self.navigationController presentModalViewController:nav animated:YES];
    NSLog(@"hello");
    

    【讨论】:

    • MainMenu 是一个 UIViewController。 initWithNibName 应该是什么?
    • @Eamorr:我已经在上面发布了正确答案。只需检查您的项目中是否有 MainMenu 作为 XIB 文件。
    • 这应该不是问题,因为根据reference,如果您为 nibName 参数指定nil,您必须在您的包中提供一个 nib 文件,其名称(不带 .nib extension) 与您的视图控制器类的名称匹配。
    • @Eamorr:你认为你的项目名称 MainMenu 中有 XIB 文件吗?
    • 您是否在课堂上使用#import "MainMenu.h" 导入了文件?不知道为什么,只是检查一下。
    【解决方案4】:

    我猜问题是您没有设置导航控制器。尝试通过

    呈现视图控制器
    [self presentModalViewController:main animated:YES];
    

    【讨论】:

    • 但我的 xib 文件中确实有一个导航控制器!我真的不明白这一切......
    • 如果设置了导航控制器,请确保插座已连接,并确保您使用上述语句的类不为零。
    【解决方案5】:

    验证对象所有者实际上是 MainMenu 并且视图已连接。

    在 MainMenu NIB 中,选择 File's Owner 并单击 Identity Inspector。类应与您的 VC 类名称匹配。

    然后在您的NIB 中选择主视图并单击连接检查器。视图出口应连接到您的文件所有者。

    如果这些都设置正确,然后再发布一些周围的代码。值得注意的是,如果这两个都设置了,

    MainMenu * main= [[MainMenu alloc] initWithNibName:nil bundle:nil];
    [self.navigationController pushViewController:main animated:YES];
    

    将加载正确的 NIB 并显示它。

    你看到了什么?另一点,如果 MainMenu 是其他带有 NIB 的 VC 的子类,则必须更改基类的 init 以覆盖默认行为,例如:

        self = [super initWithNibName:nibNameOrNil == nil ? @"BaseViewController" : nibNameOrNil bundle:nibBundleOrNil]
    

    但在这种情况下,您必须指定将覆盖基本视图控制器的 NIB。

    发布更多代码,让我们知道您在运行时看到了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多