2011-12-10 10 views
2

いくつかの再利用可能なコントロールを含む独自のUIライブラリを作成したいと思います。非常にシンプルなものは、UIView(おそらくUIImageView)とUILabelを含むLabeledViewです。iOS:ペン先からカスタムUIViewをロード

---------------- 
| outer UIView | 
| ------------ | 
| |   | | 
| | UIView | | 
| |   | | 
| ------------ | 
| | UILabel | | 
| ------------ | 
---------------- 

これをInterface Builderで実装し、外部UIViewを作成するときに内部UIViewとUILabelを「注入」するにはどうすればよいですか?私は外部のUIViewをFile's Ownerとして持ち、内側のUIViewとUILabelをLabeledViewのプロパティにIBOutletsで接続しています。この方法は、その定義されたレイアウトでペン先からビューをロードし、それにtheViewtheLabelを挿入する必要があり

[[LabeledView alloc] initWithView:(UIView *)theView andLabel:(UILabel *)theLabel] 

:私は今のようにinit関数を想像しています。これは難しいことではありませんか?私はあなたがペン先に意見などを定義した場合、あなたはここで説明loadNibNamed:を使用して、実行時にそれらを追加することができます...

答えて

1

それを得ることはありません:http://developer.apple.com/library/ios/documentation/uikit/reference/NSBundle_UIKitAdditions/Introduction/Introduction.html

これは、配列、最初のオブジェクトの意志を返します。上記の例では、容器のトップレベルのオブジェクトになります。

ペン先からオブジェクトを読み込むときにalloc/initを使用しないでください。ペン先には既にインスタンス化されたオブジェクトのシリアル化されたバージョンが含まれているためです。

+0

はい、わかりました。しかし、私は内側のUIViewとそのUILabelから外側のUIViewを作成する前に、それらを "注入"して、nibのレイアウトとサイズを適合させたいと思います。 – cschuff

+0

私は内部ビューとラベルがペン先の一部であると仮定しました。ファイルの所有者である外側のビューに接続されているアウトレットなので、ペン先に含める必要があります。私はあなたが求めていることを理解していない、あなたは私に詳細な情報を与えることができますか? – jrturton

+0

私はペンでサブビューとラベルを作成したくありません。前に作成したビューとラベルを使用したい。ペン先の表示とラベルは単にプレースホルダーとして機能する必要があります。以前に作成したビューとラベルを追加してペン先からレイアウトやプロパティを継承できるようにします。私は、これはおそらく全く可能ではないと結論に達しました。私は自分でレイアウトを実装する必要があります... – cschuff

0

これは、独自のIBOutletとメソッドを持つ独立したUIViewサブクラスを作成するのに役立ちます。また、彼らは、「ファイルの所有者 `から独立して、あなたがどこでも、あなたのコード内でそれらを使用することができることを意味します。

手順

  • が空のファイルの所有者フィールドにしておきます。
  • クリックXIBで実際のビューでフォローカスタムビューのファイル(カスタムビュークラスの名前)
  • カスタムビューの.hファイルにIBOutletを追加してください。
  • カスタムビューの.xibファイルには、「表示」をクリックして移動しますConnection InspectorにここにあなたはすべてあなたのIBOutle .hファイルで定義するts
  • それぞれのビューで接続します。あなたのCustomViewクラスの.Mファイルで

  • 従うようinitメソッドをオーバーライド - (のCustomView *)INIT { のCustomView 結果= nilを。 [NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])所有者:自己オプション:nil];NSArray (要素内のidオブジェクト) { if([anObject isKindOfClass:[self class]]) { result = anObject; 休憩。 } } リターン結果; }

  • ここで、カスタムビューをロードするときは、次のコード行を使用します。[[CustomView alloc] init];

関連する問題