1

Xib ファイルが関連付けられたカスタム UIView サブクラスを用意しました。ストーリーボードに UIView を配置し、そのクラスをカスタム サブクラスに設定します。カスタム ビューの initWithCoder: メソッドで、xib を読み込み、サブビューを初期化します。これはうまくいきます。

今、同じカスタム ビューを別の場所で使用したいのですが、サブビューのレイアウトを変更したいと考えています。同じ Xib ファイルで 2 番目のカスタム ビュー レイアウトを作成し、どのビュー コントローラーにカスタム ビューが含まれているかに応じて正しいビュー レイアウトをロードしたいと考えています。すべてのサブビューとすべてのロジックが同じであるため、レイアウトが異なるだけで、次のようなものを探しています:

-(id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super initWithCoder:aDecoder]) {
        if (self.subviews.count == 0) {
            UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];
            UIView *subview;
            if ([/*instantiating VC isKindOfClass:viewController1.class]*/) {
               subview = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
            }
            else if ([/*instantiating VC isKindOfClass:viewController2.class]*/) {
                subview = [[nib instantiateWithOwner:self options:nil] objectAtIndex:1];
            }
            subview.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
            subview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
            [self addSubview: subview];
        }
    }
    return self;
}

このカスタム ビューをインスタンス化しているビュー コントローラーに関する情報にアクセスする方法はありますか?

4

1 に答える 1

0

はい、2 つのビューを配置し、2 つのビューのタグを異なるものに設定する方法があります。たとえば、UIView サブクラスでカスタム クラスを設定するストーリー ボードで 10 と 20 とします。

次に、UIView サブクラスでこれを行います。

-(id)initWithCoder:(NSCoder *)aDecoder {

if (self = [super initWithCoder:aDecoder]) {

    if (self.subviews.count == 0) {

        UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];
        UIView *subview;
        if (self.tag == 10) {
            subview = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
        }
        else if (self.tag == 20) {
            subview = [[nib instantiateWithOwner:self options:nil] objectAtIndex:1];
        }

        subview.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
        subview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        [self addSubview: subview];
    }


}
return self; }

ストーリーボードのタグ 10 ビューは最初のビューに置き換えられ、ストーリーボードのタグ 20 ビューは 2 番目のビューに置き換えられます。

ビルドして、実行して、お楽しみください!!!

于 2016-08-17T20:54:41.150 に答える