类未显示 NIB 的视图

Posted

技术标签:

【中文标题】类未显示 NIB 的视图【英文标题】:Class not showing view from NIB 【发布时间】:2014-02-19 04:45:10 【问题描述】:

当我调用视图控制器时,它显示为空白,并且似乎没有正确调用我的 NIB 中的布局。我至少有 5 个其他类尊重我的 NIB 布局。

我有一堂课chwFinishedViewController.h

在我的故事板上,我有一个UIViewController,它被分配了这个类并给定了故事板ID complete。看下面的截图

这里是chwFinishedViewController.m

#import "chwFinishedViewController.h"

@interface chwFinishedViewController ()

@end

@implementation chwFinishedViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


@end

这就是我如何称呼控制器。控制器调用之前的一切都正确执行:

 if (!error) 
chwFinishedViewController *complete = [[chwFinishedViewController alloc] init];
[self.navigationController pushViewController:complete animated:YES];


【问题讨论】:

我已经编辑了我的故事板帖子 我对你的代码有一点批评。如果方法只包含super 类对该方法的调用,您可能希望完全删除该方法。例如,viewDidLoaddidReceiveMemoryWarning 【参考方案1】:

试试这个:

chwFinishedViewController *complete = [[chwFinishedViewController alloc] initWithNibName:@"complete" bundle:nil];

您的 xib 和 chwFinishedViewController 构造函数之间没有关系。你只使用init,它什么也没做。 Here's apple doc.

编辑

您使用故事板。所以试试这个:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
chwFinishedViewController* complete = [storyboard instantiateViewControllerWithIdentifier:@"complete"];

【讨论】:

它返回:“'chwFinishedViewController' 没有可见的@interface 声明选择器'initWithNibName:'” @user3085646,抱歉,请改用initWithNibName:bundle: 您的故事板编辑工作正常。我从类似的东西开始,但我使用的是chwFinishedViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"complete"];,但这引发了一个完全不同的错误。非常感谢。 @user3085646,不客气!【参考方案2】:
 you have just init the controller..
use initWithNibName instead of only init

【讨论】:

【参考方案3】:

使用这个...

chwFinishedViewController *complete = [[chwFinishedViewController alloc] initWithNibName:@"complete" bundle:nil]; 

【讨论】:

嗯。这给了我:'NSInternalInconsistencyException',原因:'Could not load NIB in bundle:'NSBundle /.../Chewsey.app> (loaded)' with name 'complete'' 我的故事板被命名为“Main”,但 main.storyboard 上的 UIViewController 的 storyboardID 为“complete”。是因为我使用的是 initWithNibName:[storyboardID] 而不是 NIB 文件的名称?【参考方案4】:

应该是:

chwFinishedViewController *complete = [[chwFinishedViewController alloc] initWithNibName:@"complete" bundle:nil]; 

希望这会有所帮助.. :)

【讨论】:

【参考方案5】:

我遇到了类似的问题,我的解决方案是删除 viewcontroller 类的代码中遗留的空 loadView 方法。

【讨论】:

以上是关于类未显示 NIB 的视图的主要内容,如果未能解决你的问题,请参考以下文章

创建标题 NIB 并在所有视图上显示

Interface Builder - 自定义类未显示

展开单元格以显示 nib 文件视图

如何显示从单独的 NIB 文件加载的子视图

Cocoa - 从 nib 加载视图并将其显示在 NSView 容器中,作为子视图

从 nib 文件加载 UIView?