致电 2nd XIB 和班级

Posted

技术标签:

【中文标题】致电 2nd XIB 和班级【英文标题】:Call 2nd XIB and Class 【发布时间】:2011-05-09 21:31:25 【问题描述】:

我正在慢慢自学 Obj-C,我有一个有 2 个类的项目,每个类都有一个与之配套的 XIB。

为了便于测试,将它们命名为一和二

我更改了 plist 以使应用程序从二而不是一开始,并且有效。

所以我确信(我希望)类和 XIB 都可以。

因此,我想从 One 调用(查看打开或在 ObjC 中调用的任何内容) Two 类和随之而来的 XIB。然后我希望能够回到One。应该很简单吧?我已经搞砸了 2 天,但仍然没有让它工作。

有没有人有示例代码来说明如何做到这一点?我在这方面找到了几个文档,但我想我的速度很慢,因为我无法弄清楚。

感谢您的帮助!


更多信息:编辑:bm 是第二个 XIB

    bm *screen = [[[bm alloc] initWithNibName:@"bm" bundle:nil] autorelease];

我添加了上面的代码,然后在这一行得到了这个错误

2011-05-09 14:48:23.242 HW[7265:207] * -[bm initWithNibName:bundle:]:无法识别的选择器发送到实例 0x392e820 2011-05-09 14:48:23.244 HW[7265:207] 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'** -[bm initWithNibName:bundle:] : 无法识别的选择器发送到实例 0x392e820'

【问题讨论】:

将两者都放入 UINavigationController 对你有用吗? 我真的不知道什么是最好的,因为我的脚还在湿。第一个 XIB 有按钮可以转到 6 个不同的子菜单,每个子菜单都可以有更多。我认为这意味着我应该为这些菜单中的每一个制作一个 XIB... 我们最常使用的 UIViewControllers 是 XIB,bm 是 UIViewController 吗? 【参考方案1】:

有两种方法可以做到这一点,这完全取决于您希望它的外观。

将第二个视图呈现为模态视图控制器:

ViewControllerName *viewController = [[[ViewControllerName alloc] initWithNibName:@"ViewControllerName" bundle:nil] autorelease];
[self presentModalViewController:viewController animated:YES];

或者您实际上可以将视图换出UIWindow

UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
ViewControllerName *viewController = [[[ViewControllerName alloc] initWithNibName:@"ViewControllerName" bundle:nil] autorelease];
window.rootViewController = viewController;

【讨论】:

感谢您提供详细信息,但我想我已经尝试过类似的方法,但它不起作用。我知道我有问题但不确定是什么?请参阅我在上面发布的额外信息。 这很奇怪,你的代码看起来不错。 bm 是什么的子类? UIViewController? 我只是把它变成了一个类,而不是一个子类。我制作了两个类和 XIB,然后以 root 身份测试它们是否工作正常。我想这就是问题所在? 是的,如果您希望它管理UIView,它应该是UIViewController 的子类。 Xcode 会为你创建这个,只需转到 File > New File > Cocoa Touch > UIViewController 子类。 好的,再次感谢!我当然感谢帮助!我创建了一个新类并让它同时创建 XIB。我在新类的视图中添加了一个标签。仍然得到同样的错误;(

以上是关于致电 2nd XIB 和班级的主要内容,如果未能解决你的问题,请参考以下文章

iphone+相同的xib用于不同的班级

iPad Xib 不显示

iOS:使用 xib 的自定义视图

xib 和没有 xib 的区别

在另一个 xib 中使用 xib 对象

在 MainWindow.xib 中加载视图 .xib