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

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

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

4

2 回答 2

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在笔尖中设置的内容将所有者更改为适当的对象(如果甚至需要 - 听起来您有一个静态视图,所以它可能不是)

于 2012-05-30T19:43:04.313 回答
0

从参考指南

当您使用 nib 文件的内容创建 UINib 对象时,该对象会在引用的 nib 文件中加载对象图,但它尚未取消归档它。要取消归档所有 nib 数据,从而真正实例化 nib,您的应用程序调用 UINib 对象上的 instantiateWithOwner:options: 方法

UINib 对象可以提供显着的性能改进

所以我猜你想要这样的东西:

UINib *nib = [UINib nibWithNibName:@"HealthLegend" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil options:nil];
UIView *view = [views objectAtIndex:0];
于 2012-05-30T19:44:21.457 回答