2012-01-19 4 views
0

私はIBで作成されたカスタムUITableViewCellを持っています。 enter image description hereプロパティを使用してオブジェクトのクラスを決定できますか?

すべてのセルにこの一般的なレイアウトが適用されます。しかし、いくつかのセルでは、2つの白いビューはclassAになり、他のセルでは2つの白いビューはclassBになります。 (両方のUIViewのサブクラス)。私はプロパティを使って2つのビューの特定のサブクラスを割り当てようとしました。

Iは、細胞の性質のような2つのビュー

@property (nonatomic, retain) IBOutlet UIView *leftView; 
@property (nonatomic, retain) IBOutlet UIView *rightView; 

そしてIは、テーブルビューを作る私のビューコントローラで、Iは、タイプsubclassAのオブジェクトを作成しleftViewとして割り当てる試み、leftViewように設定サブクラスAの型になります。他のセルでは、私はサブクラスBのオブジェクトを作成し、それをleftviewに設定します。そのため、それらのセルでは、ビューはサブクラスbになります。

//equationTextField is a subclass of UIView 
EquationTextField *textField = [[EquationTextField alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; // arbitrary frame 
cell.leftView = textField; 

ただし、このコードは機能しません。私のビューの特定のクラスを割り当てるより良い方法はありますか?

+0

あなたの問題が何であるかはっきりしていない - あなたはUIViewのように、あなたの左ビューと右のビューを定義し満足していませんか? – jrturton

+0

私は、UIViewの2つのサブクラスsubclassAとsubclassBを持っています。テーブルのいくつかのセルでは、2つのビューはサブクラスAである必要があります。他のセルでは、ビューはサブクラスBである必要があります。私はIBでビューを作成したので、コードでそれらのビューを参照する必要があります。したがって、両方のサブクラスをそのプロパティに割り当てることができるので、UIView型のプロパティを作成しました。私は、左のビューをサブクラスAまたはサブクラスBにするかどうかを宣言する方法が必要です – Mahir

+0

あなたの質問を誤解していない限り、問題はありません。 cellForRowメソッドで設定を行い、インデックスパスに応じて使用する必要のあるクラスを使用します。 – sosborn

答えて

0

あなたがやっていることは問題ありませんが、パフォーマンスを向上させるために2つの異なるセルタイプ(カスタムビューが既に組み込まれています)を調べることをお勧めします。それぞれ、インデックスパスに応じて異なる再利用識別子。 cellForRowAtIndexPathで毎回ビューを作成することは決して良い考えではありません。

同じセルから両方の型を派生させ、異なる再利用識別子を使用して、最初にセルを作成するときにのみ正しいサブクラスを追加することもできます。

0

あなたが必要な場合はcell.leftViewがあなたのEquationTextFieldであるかどうかを確認することができます:

if([cell.leftView isKindOfClass:[EquationTextField class]]) { 
    NSLog(@"View is EquationTextField"); 
} 
else { 
    NSLog(@"View is not EquationTextField"); 
} 
+0

p.s.オブジェクトインスタンスをキャストする必要があります。 cell.leftView =(UIView *)textField; –

関連する問題