2012-05-30 42 views
0

我有一个显示图例的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对象。对于我的传奇之一,我想知道如果我可以加载一个.xib到我的视图控制器没有图像或UIView对象。我有一个非常简单的传说,我只是想要一些颜色编码的正方形(带有颜色的UIViews)和一些文本(UILabels)。我可以在独立的.xib文件中创建它,但我不确定如何将它加载到我的LegendViewController中。我还有:

UINib *nib = [UINib nibWithNibName:@"HealthLegend" bundle:nil]; 

其中HealthLegend是我的独立.xib文件与我的数据。或者不能这样做,我需要在一些绘图程序中创建一个图像,或者在drawRect中手动绘制代码?谢谢。

回答

0

从参考指南

当创建使用笔尖文件的内容的一个UINib对象,该对象 加载对象GRAP h在引用的nib文件中,但它确实没有对其进行解压缩。如果要解除封存所有的笔尖数据,从而真正实现 实例笔尖在应用程序调用 instantiateWithOwner:选择:UINib对象的方法

UINib对象可以提供一个显著的性能改进

所以我猜你想要类似于:

UINib *nib = [UINib nibWithNibName:@"HealthLegend" bundle:nil]; 
NSArray *views = [nib instantiateWithOwner:nil options:nil]; 
UIView *view = [views objectAtIndex: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在笔尖(如果是这样的,甚至是必需的适当的对象 - 听起来像是你有一个静态视图,以便它可能不是)

相关问题