2012-01-28 12 views
0

実行時にプログラムでセルに追加するUIImageViewを使用して、すべてのテーブルビューセルにカスタムの境界線を追加しようとしています。問題は、ユーザーがスクロールすると、ボーダーがランダムに消えてしまうことが多いことです。UITableViewCellに境界線サブビューを動的に追加する

このコードは私のcellForRowAtIndexPath方法である:

UIImageView* border = (UIImageView*)[cell viewWithTag:10]; 
if (border) 
    [border removeFromSuperview]; 

NSInteger sectionRows = [tableView numberOfRowsInSection:[indexPath section]]; 
NSInteger row = indexPath.row; 

if (row != sectionRows - 1) { 
    UIImageView* border = [[UIImageView alloc] initWithImage:[[ImageManager sharedManager] imageNamed:@"dashed_border"]]; 
    [border setFrame:CGRectMake(10, [self tableView:tableView heightForRowAtIndexPath:indexPath], 290, 1)]; 
    [border setTag:10]; 
    [cell addSubview:border]; 
    [border release]; 
} 

が存在する場合には、境界サブビューを削除し、行が最下行でない場合は、行の下部にある境界線を挿入します。

これが競合状態であるかどうか、またはユーザーがスクロールするときにcellForRowAtIndexPathが呼び出されない特定の時間があるかどうかはわかりません。

+0

セクションの行数はこれまでに変更されていますか? – smparkes

+0

そして何をするにしても、いつもボーダーを取り除いて再追加するのが一番一般的なケースのように思えます。代わりに、それがそこにあり、あなたが最後の行である場合にのみ、それを削除してください。通常はそれほどシンプルではありませんが、テーブルビューのセルでは、必要のない作業はしたくありません。 – smparkes

+0

いいえ、行の数は、コレクション内のアイテムの数に応じて設定されます。 – James

答えて

1

おそらく、以下のセルが境界線の上に描画されます。これは、テーブルビューのサブビューの順序に依存し、スクロールすると順序が変わります。

これは、境界線をセル境界の外に追加するためです。 1px上に移動してみてください。 Like:

[border setFrame:CGRectMake(10, [self tableView:tableView heightForRowAtIndexPath:indexPath] - 1, 290, 1)]; 
関連する問題