我有一个显示图例的LegendViewController。最初,我只是在那里放了一个UIImageView。但是现在,我们需要一些传说,我想重用LegendViewController。所以我创建了一个新的初始化器:
- (id)initWithView:(UIView *)view withNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
[self initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self.view addSubview:view];
}
return self;
}
所以现在假设我传入一个UIView对象。对于我的一个传说,我想知道是否可以在没有图像或UIView对象的情况下将.xib加载到我的视图控制器中。我有一个非常简单的传说,我只想要一些颜色编码的方块(带颜色的UIViews)和一些文本(UILabels)。我可以在一个独立的.xib文件中创建它,但我不知道如何将它加载到我的LegendViewController中。我到目前为止:
UINib *nib = [UINib nibWithNibName:@"HealthLegend" bundle:nil];
其中HealthLegend是我的独立.xib文件及其数据。或者这可以不做,我需要在某个绘图程序中创建图像,或者在drawRect中手动绘制代码?感谢。
答案 0 :(得分:1)
你可以像这样加载一个笔尖
NSArray *topLevelObjects = [[NSBundle bundleForClass:[self class]] loadNibNamed:@"HealthLegend"
owner:nil
options:nil];
// Assuming you only have one root object in your nib
[self.view addSubview:[topLevelObjects objectAtIndex:0];
根据您在笔尖中设置File's Owner
的内容,将所有者更改为相应的对象(如果需要的话 - 听起来像是静态视图,因此可能不是这样)
答案 1 :(得分:0)
参考指南
使用nib文件的内容创建UINib对象时, 对象在引用的nib文件中加载对象图,但确实如此 尚未解开它。解压缩所有nib数据,从而真正地解压缩 实例化你的应用程序调用的nib instantiateWithOwner:options:UINib对象上的方法
UINib对象可以提供显着的性能提升
所以我猜你想要的东西是:
UINib *nib = [UINib nibWithNibName:@"HealthLegend" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil options:nil];
UIView *view = [views objectAtIndex:0];