3

私はこのクラスを試しました

https://github.com/autresphere/ASDepthModal

私はそれがそうであるようにポップアップしたいのですが、その日によって変更する必要があるため、プログラムでラベルを設定できるようにしたいと考えています。ストーリーボードを使用しているので、.xib と uiview.h と uiview.m を作成しました。私のメイン UIViewController には次のものがあります。

xibContents = [[NSBundle mainBundle] loadNibNamed:@".xib" owner:self options:nil];
testView = [xibContents lastObject];

.xib でファイル所有者を uiview クラスに設定しましたが、これにより問題が発生します: NSUnknownKeyException .xib 内の uiew を uiview クラスに設定すると、アプリケーションが読み込まれ、必要なように開くことができますが、プログラムでラベルの状態を変更できませんか? 私はここで完全に迷っています!

4

3 に答える 3

3

通常、UIView は IBOutlets にアクセスできません。Apple の種類の xib は、UIViewControllers にのみ割り当てられることを意図しています。

ただし、次の 2 つの方法で xib からビューを読み込むことができます。

1) UIViewController で使用する追加の xib を作成します。File's Owner をビュー コントローラーに設定し、ビューのクラス名をカスタム ビュー クラスに設定します。インターフェイスビルダーでは、これは「カスタムクラス」の下にあります。ビューを IBOutlet として設定できます。UIViewController が xib をロードし、自分自身を所有者として設定すると、iOS はカスタム クラスのインスタンスを作成します (上記で試したように、コントローラー クラス内からのみ)。

2) UIView クラスに xib をロードし、結果のオブジェクトに self を設定します。

- (id)init {
    self = [super initWithFrame:CGRectMake(0, 0, 1024, 352)];

    if (self) {
        NSArray* nib = [[NSBundle mainBundle] loadNibNamed:@"TCSNumberKeyPad" owner:self options:nil];
        [[nib objectAtIndex:0] setFrame:CGRectMake(0, 0, 1024, 352)];
        self = [nib objectAtIndex:0];
    }

    return self;
}

いずれの場合も、IBOutlet プロパティではなく、コードを介してラベルを取得する必要があります。subviews プロパティでラベルを見つけることができます。

UILabel* myLabel = [self.subviews objectAtIndex:0];

于 2013-05-06T00:09:09.880 に答える