2016-08-17 9 views
1

関連するXibファイルでカスタムUIViewサブクラスを用意しました。ストーリーボードでは、私はUIViewを配置し、私のカスタムサブクラスにそのクラスを設定します。カスタムビューのinitWithCoder:メソッドでは、xibをロードしてサブビューを初期化します。これは素晴らしいです。initWithCoder:カスタムビュー - インスタンス化されているビューコントローラを特定します

他の場所で同じカスタムビューを使用したいのですが、サブビューのレイアウトが異なるようにしたいと思います。私は同じ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; 
} 

がインスタンス化されたビューコントローラに関する情報にアクセスする方法はありますこのカスタムビュー?

答えて

0

はい、2つのビューを配置し、UIViewサブクラスで設定するカスタムクラスのストーリーボードで、2つのビューのタグを異なる、たとえば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番目のビューに置き換えられます。

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

関連する問題