实例化nib对象以在视图中呈现

时间:2012-05-30 19:26:12

标签: iphone

我有一个显示图例的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中手动绘制代码?感谢。

2 个答案:

答案 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];