0

カスタムテーブルセルを含むTableViewがあります。画面デザインのレイアウトを維持するために、各セルの下部にプログラムで境界線を追加します。アプリが初めて読み込まれるときは、すべて問題ありません。しかし、スクロールした後 (そして一番上までスクロールした後)、画面全体に複数の境界線が表示されます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{  static NSString *CellIdentifier = @"CellProgramm";
ProgrammTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

...

if([object.cellMessageArray[1] isEqualToString:@"wrapper"] || [object.cellMessageArray[1] isEqualToString:@"keynote"] || [object.cellMessageArray[1] isEqualToString:@"break"]) {
UIImageView *lineSeparator = [[UIImageView alloc] initWithFrame:CGRectMake(0, cell.bounds.size.height, 1024, 5)];
lineSeparator.image = [UIImage imageNamed:[NSString stringWithFormat:@"blind.png" ]];
lineSeparator.backgroundColor = [UIColor whiteColor];
[cell.contentView addSubview:lineSeparator];
}
else if([object.cellMessageArray[1] isEqualToString:@"standard"]) {
UIImageView *lineSeparator = [[UIImageView alloc] initWithFrame:CGRectMake(60, cell.bounds.size.height+4, 1024, 1)];
lineSeparator.image = [UIImage imageNamed:[NSString stringWithFormat:@"blind.png" ]];
lineSeparator.backgroundColor = [UIColor pxColorWithHexValue:@"eeeeee"];
[cell.contentView addSubview:lineSeparator];
}
}

誰かアイデアはありますか?

4

1 に答える 1

2

テーブルビューをスクロールすると、dequeueReusableCellWithIdentifierパフォーマンスを最適化するためにセルが再利用されます ( )。上記のコードでは、メソッドが呼び出されるlineSeparatorたびに画像ビューがセルに追加されます。cellForRowAtIndexPathセルを 5 回使用すると、5 つの画像ビューが追加されます。

これに対処する 1 つの方法は、lineSeparator画像ビューを再利用する前にセルから削除することです。これは通常、セルのprepareForReuseメソッドで行われます。

で、イメージ ビューcellForRowAtIndexPathにタグを追加します(例:lineSeparatorlineSeparator.tag = 100;

セルのクラスで、prepareForReuseメソッドを実装します。例えば:

-(void)prepareForReuse{
    UIView *lineSeparatorView = [self.contentView viewWithTag:100];
    [lineSeparatorView removeFromSuperview];
}
于 2013-05-15T14:41:22.867 に答える