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 オブジェクトを渡すと機能します。私の伝説の 1 つとして、画像や UIView オブジェクトなしで .xib をビュー コントローラーにロードできるかどうか疑問に思っていました。色分けされた四角形 (色付きの UIView) とテキスト (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];

nib に設定した内容に応じて、所有者を適切なオブジェクトに変更します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 に答える