0

私はかなり複雑なUITableViewCellを持っており、本番コードでは、次のように選択したUILabelを引き出すことができます

[[[[[[cell subviews] objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:4];

すべてが問題なく機能します。私が抱えている問題は、これがどのように機能するかを示す簡単な単体テストを作成しようとしたときです。

何らかの理由で、セルのcontentViewプロパティに2つのアイテムがあるシナリオを作成できません。

したがって、[[cell subviews] objectAtIndex:0]は簡単に取得できますが、1は取得できません。

私のテストヘルパーでは、これをシミュレートするために次のことを行っています(運がない)

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
UIView *view1 = [[UIView alloc] init];
UILabel *label1 = [[UILabel alloc] init];
UIView *view2 = [[UIView alloc] init];
UILabel *label2 = [[UILabel alloc] init];

[view1 addSubview:label1];
[cell.contentView addSubview:view1];

[view2 addSubview:label1];
[view2 addSubview:label2];
[cell.contentView addSubview:view2];

NSLog(@"inside ...%@", [[cell subviews] objectAtIndex:1]);
4

1 に答える 1

0

label1 を view1 と view2 に追加することはできません。2 つの異なるラベルを作成する必要があります。1 つのビューには 1 つのスーパービューのみを含めることができるため、次のように言うと[view2 addSubview:label1];、label1 がビュー 1 から削除されます。

于 2012-04-19T12:28:12.863 に答える