从NIB加载UIView作为从NIB加载的另一个UIView的子视图

时间:2011-03-25 15:35:57

标签: iphone uiview interface-builder

这个想法基本上是:
myViewController NIB内部,我有一个UIView作为子视图,与IBOutletMyViewController的连接。我想从NIB加载UIView子视图。 subView还有一个与之关联的类。但子视图没有显示。这是我做的事情

MyViewController.h上的

@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

我做错了什么?

2 个答案:

答案 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来执行布局/出口。