我正在尝试做一些复杂的事情,但应该是可能的。所以这里对你们所有的专家来说都是一个挑战(这个论坛有很多人:))。
我正在创建一个问卷“组件”,我想将它加载到 NavigationContoller
(我的 QuestionManagerViewController
)上。 “组件”是一个“空”的UIViewController
,可以根据需要回答的问题加载不同的 View 。
我的做法是:
- 将 Question1View 对象创建为
UIView
子类,定义一些IBOutlets
。 - 创建(使用 Interface Builder)
Question1View.xib
(这就是我的问题可能在哪里)。我将UIViewController
和UIView
都设置为 Question1View 类。 - 我将 outlet 与 View 的组件链接(使用 IB)。
我将
QuestionManagerViewController
的initWithNib
覆盖为如下所示:- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:@"Question1View" bundle:nibBundleOrNil]) { // Custom initialization } return self; }
当我运行代码时,我收到了这个错误:
2009-05-14 15:05:37.152 iMobiDines[17148:20b] *** Terminating app due to uncaught exception '
NSInternalInconsistencyException
', reason: '-[UIViewController _loadViewFromNibNamed:bundle:]
loaded the "Question1View" nib but the view outlet was not set.'
我确信有一种方法可以使用 nib 文件加载 View ,而无需创建 viewController 类。
最佳答案
还有一种更简单的方法可以访问 View ,而不是将 nib 作为数组处理。
1) 创建一个自定义 View 子类,其中包含您以后想要访问的任何 socket 。 --我的 View
2) 在要加载和处理 nib 的 UIViewController 中,创建一个 IBOutlet 属性来保存加载的 nib 的 View ,例如
在 MyViewController(一个 UIViewController 子类)中
@property (nonatomic, retain) IBOutlet UIView *myViewFromNib;
(不要忘记合成它并在你的 .m 文件中发布)
3) 在 IB 中打开您的 nib(我们称之为“myViewNib.xib”),将文件的所有者设置为 MyViewController
4) 现在将文件的 Owner outlet myViewFromNib 连接到 nib 中的主视图。
5) 现在在 MyViewController 中,编写以下行:
[[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil];
现在,只要您这样做,调用您的属性“self.myViewFromNib”即可让您从您的 nib 访问 View !
关于iphone - 如何使用使用 Interface Builder 创建的 nib 文件加载 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/863321/