以下のコードでわかるように、レーサーの時間はtableView
です。最初のレーサーには金色の円(goldMedal
イメージ)があり、秒にシルバーと3番目のブロンズがあります。他の人はすべてmedal
イメージです。これらの画像は単にゴールド/シルバー/ブロンズ/黒の円です。このメダルイメージにUILabel
ビューを入れて、レースのレッカーの順位を決める番号を入れたいので、最高の(同じ)タイムを持つレーサーはgoldMedal
イメージに番号1を、2番目のレーサーにはsilverMedal
イメージそれに番号2を付けています。問題は、私がテーブルビューで非常に多くのレーサーを抱えていて、スクロールダウンすると、レーサーに同じ数字がないことです。その数字はスクロールするときに変化しています。私はそれをどうしたらいいのか分からない。誰でも助けてくれますか?TableViewの再利用可能なセルのindexPath.row番号が間違っています
また、私は、レーサーの数をカウントするために変数を使用しました。それは、より悪いことに、indexPath.row
であり、2つの方法のどれも働いていませんでした。誰でもこの問題をどのように解決するか、彼の見解を少なくとも私に教えてもらえますか?おかげ
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"SKSTableViewCell";
SKSTableViewCell *sksTableViewCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(sksTableViewCell.frame.origin.x+22.5, sksTableViewCell.frame.origin.y+20.5, 15, 15)];
numberLabel.font = [UIFont systemFontOfSize:12];
numberLabel.textColor = [UIColor whiteColor];
numberLabel.textAlignment = NSTextAlignmentCenter;
numberLabel.adjustsFontSizeToFitWidth = YES;
if (!sksTableViewCell) {
sksTableViewCell = [[SKSTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
sksTableViewCell.backgroundColor = [UIColor clearColor];
if ([[[[ArraySingleton sharedManager].sharedArray objectAtIndex:indexPath.row] times] count]) {
sksTableViewCell.expandable = YES;
} else {
sksTableViewCell.expandable = NO;
}
}
sksTableViewCell.imageView.image = [UIImage imageNamed:@"medal"];
// Medals
int golds = [[self.bestThreeRacersDictionary objectForKey:@"golds"] intValue];
int silvers = [[self.bestThreeRacersDictionary objectForKey:@"silvers"] intValue];
int bronzes = [[self.bestThreeRacersDictionary objectForKey:@"bronzes"] intValue];
sksTableViewCell.textLabel.text = [NSString stringWithFormat:@" %@",[[[ArraySingleton sharedManager].sharedArray objectAtIndex:indexPath.row] name]];
numberLabel.text = [NSString stringWithFormat:@"%lu", [Racer shift:golds silvers:silvers bronzes:bronzes]+indexPath.row];
helpIndex++;
if (indexPath.row < golds) {
sksTableViewCell.imageView.image = [UIImage imageNamed:@"goldMedal"];
numberLabel.text = @"1";
helpIndex--;
} else if (indexPath.row < (golds+silvers)) {
sksTableViewCell.imageView.image = [UIImage imageNamed:@"silverMedal"];
numberLabel.text = @"2";
helpIndex--;
} else if (indexPath.row < (golds+silvers+bronzes)) {
sksTableViewCell.imageView.image = [UIImage imageNamed:@"bronzeMedal"];
numberLabel.text = @"3";
helpIndex--;
}
[sksTableViewCell addSubview:numberLabel];
if ([[[[ArraySingleton sharedManager].sharedArray objectAtIndex:indexPath.row] times] count]) {
sksTableViewCell.expandable = YES;
} else {
sksTableViewCell.expandable = NO;
}
sksTableViewCell.textLabel.text = [NSString stringWithFormat:@"%@", [[[ArraySingleton sharedManager].sharedArray objectAtIndex:indexPath.row] name]];
return sksTableViewCell;
}
あなたは以前の質問から学ばなかった。セル上で 'addSubview:'を何度も何度も呼び出し続けてはいけません。 – rmaddy
'cellForRowAtIndexPath'でサブビューを追加することは決して良い考えではありません。あなたのセルのサブクラスが、イニシャライザでプログラム的に、またはストーリーボードのプロトタイプのセルを通して、ビューを設定するようにする – Paulw11