2012-01-13 6 views
2

これまでに質問されていますが、明確な答えが見つかりません。XCodeを使用してカスタムUIViewをデザインする4

私はカスタムUIViewクラスを設計したいと思います。私はXIBファイルでXCode 4のレイアウトをしたいと思います。理想的には

  • 私はファイルMyView.h、MyView.m、MyView.xibを持っています。
  • コードは動作を定義し、XIBファイルはレイアウトを定義します。
  • コードには、レイアウト要素を参照するためのXIBファイルへのアウトレットがあります。
  • ビューのローダーが異なるオブジェクトである可能性があります。

私は、ビューをロードできるようにしたい:私はファイルの所有者を設定し、NSBundleを通じてXIBをロードするさまざまな方法の多くを試みたが、私は入れません

MyView *v = [MyView myView]; 

キー値コーディングの問題

誰でも基本的な方法を共有できますか?

私はrepo of my current code hereです。ご覧のように、キー値のコーディングエラーが生成されます。

答えて

0

ああ、私はそれを理解したようです。

キーは、以下の通りである:

  • をXIBファイルUIViewのは、汎用のUIViewにする必要があります。サブクラスに設定する必要はありません。
  • ファイルの所有者がサブクラスである必要があります。
  • アウトレットは、ファイルの所有者に行きます。カスタムUIViewので

次のように、NIBをロード:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil]; 
     UIView *v = [[nib instantiateWithOwner:self options:nil] lastObject];    
     v.frame = self.frame; 
     [self addSubview:v]; 
    } 
    return self; 
} 
0

あなたはそれをインスタンス化するにはどうすればよい正確?私の "コンテナ"クラスで私はプロパティとして私のカスタムビューのアウトレットを持っていますが、私がしようとすると、私はそれが正しく初期化されていることを知っていますが、 NSLog()私は私のカスタムビューのinitWithFrame:メソッドを配置します。私はストーリーボードにそれを定義したように、新しいクラスをinstatiating前に、ビューがある私のメインビューコントローラ内から

、:<CustomView: 0x6a83bb0; frame = (38 153; 244 153); autoresize = RM+BM; layer = <CALayer: 0x6a83c60>>

はしかし、カスタムビューのinitWithFrame内:,フレームは{{0, 0}, {0, 0}}とあります表示は<UIView: 0x68ca160; frame = (0 0; 0 0); autoresize = W+H; layer = <CALayer: 0x68d1800>>です。

初期化が行われた後で、カスタムビューのメインビューのプロパティはほとんど(null)で、私を困惑させます。

私はここで非常に単純なものが欠けていると確信しています。ストーリーボードのメインビュー内にカスタムビューを定義することさえ想定されていますか?

ありがとうございます!

関連する問題