这个想法基本上是:
在myViewController
NIB内部,我有一个UIView作为子视图,与IBOutlet
类MyViewController
的连接。我想从NIB加载UIView子视图。 subView还有一个与之关联的类。但子视图没有显示。这是我做的事情
@interface MyViewController : UIViewController {
IBOutlet SubView *subView; // this outlet is connected to an empty UIView on IB
}
@end
MyViewController.m上的
-(id)init {
if ((self = [super init])) {
// load the main view
[[NSBundle mainBundle] loadNibNamed:@"myViewController" owner:self options:nil];
// load the sub view from another NIB
self.subView = [[[NSBundle mainBundle] loadNibNamed:@"subView" owner:self options:nil] objectAtIndex:0];
}
}
SubView.h定义为:
@interface SubView : UIView {
}
@end
我做错了什么?
答案 0 :(得分:4)
您需要做的是将文件所有者设置为UIViewController
,将您的视图连接到文件所有者的view
属性,保存您的笔尖。在你的代码中,像这样加载你的笔尖:
UIViewController* c = [[UIViewController alloc] initWithNibName:@"Foo" bundle:nil];
SubView* subView = [c view];
应该参加比赛。
最后要注意的是,subView
的类型应与界面构建器中定义为类名的任何类型相同。如果它是SubView,那么在代码中将其声明为SubView*
是安全的。
答案 1 :(得分:3)
GianPac - 无耻的自我推销,但我在一个月前做了一篇关于此事的博客文章。随意忽略与阴影相关的代码。
http://nathanhjones.com/2011/02/20/creating-reusable-uiviews-with-a-drop-shadow-tutorial/
另外,我(感谢几个人的建议)避免在我的“视图”上有多个视图控制器。我上面概述的方法允许您完成此操作并仍然使用IB来执行布局/出口。