加载一个xib文件

Posted

技术标签:

【中文标题】加载一个xib文件【英文标题】:loading a xib file 【发布时间】:2013-02-13 06:20:58 【问题描述】:

你好,我只是一个初学者。

我创建了一个新的 xib 文件。现在我尝试像下面的代码一样调用它,但它不起作用。

这是我在文件所有者中所做的:

UIViewController *controller;
controller = [[UIViewController alloc]initWithNibName:@"UserFeedback" bundle:nil];
[self.view addSubview:controller.view];

我得到的错误是:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "UserFeedback" nib but the view outlet was not set.'

【问题讨论】:

不要使用 UIViewController 只需创建 UIViewController 的子类并使用该子类。而且 xib 必须与该子类映射。 ***.com/questions/4763519/… 我怀疑它是否设置为适当的类AFMoviePlayerController。 【参考方案1】:

希望你已经创建了“controller.h”和“controller.m”UIViewController。

然后将类“控制器”放入“UserFeedback”.xib 文件中。

并将视图对象与“UserFeedback”.xib 文件绑定。

试试这个,然后告诉我。

几乎你会获得成功。

干杯!

【讨论】:

【参考方案2】:

这是你可以使用的技术:

UIViewController *控制器; 控制器 = [[UIViewController alloc]initWithNibName:@"UserFeedback" bundle:nil]; [self.view addSubview:controller.view];

上面的代码是正确的,但首先你要检查控制器视图是否绑定..我认为错误是说你没有绑定控制器视图

【讨论】:

【参考方案3】:

以下图表将帮助您理解

.

正如我现在从您的代码中看到的那样

 ATMoviePlayerController *controller;
 controller = [[ATMoviePlayerController alloc]initWithNibName:@"UserFeedback" bundle:nil];
 [self.view addSubview:controller.view];

【讨论】:

我已经将视图映射到文件的所有者,现在我没有收到错误,但问题是没有任何反应... 所以请把它映射到文件所有者而不是在右侧面板上单击第三个选项卡并在自定义类中提及你的类 我现在做了,但没有任何反应。 右键文件所有者并选择地图视图也可以查看 其实我的问题是别的,在我的代码中我也关闭了实际的视图,结果它也关闭了加载的 xib...【参考方案4】:

似乎故事板中的插座设置正确,但在代码中访问它时,您可能需要修改一些代码。

AFMoviePlayerController *controller = [[AFMoviePlayerController alloc]initWithNibName:@"UserFeedback" bundle:nil];
[self.view addSubview:controller.view];

【讨论】:

以上是关于加载一个xib文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥每次都加载新的 xib 文件?为啥不替换前一个?

使用 NSView 加载 Xib 文件

如何在另一个视图中加载 xib 文件?

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

iOS:Xcode 似乎在 XIB 文件名中插入了一个额外的空格,导致“无法加载 XIB 文件”问题

View Controller 更新后继续加载xib文件