У меня есть экран, в котором у меня есть UIScrollView. В этом встроен UITableView. Проблема, которую я испытываю, связана с повторным использованием Ячейки. Здесь я прилагаю несколько скриншотов для выяснения проблемы.ярлык повторяется во время прокрутки
Перед прокруткой: как экран загружается.
при прокрутке:
, а затем прокрутки назад вверх:
как вы можете видеть из-клетки повторно использовать LBM теперь отображается вместо даты. Поскольку это встроенная ячейка таблицы групп, я не могу использовать prepForReuse.
Я прикрепляю свой код для cellForRowAtIndexPath здесь.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell * cell = (UITableViewCell *)[tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
reuseIdentifier:CellIdentifier] autorelease];
// Here we are creating Custom Label to Display the TakenTime and TakenDate of Vitals
// in center.
if (indexPath.row==0) {
lbl_title = [[UILabel alloc] initWithFrame:CGRectMake(0, 2, 320, 33)];
lbl_title.textAlignment = UITextAlignmentCenter;
lbl_title.font = [UIFont boldSystemFontOfSize:14];
lbl_title.textColor = [UIColor whiteColor];
lbl_title.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:lbl_title];
}
}
switch (indexPath.row) {
case 0:
lbl_title.text = [NSString stringWithFormat:@"%@ %@",[dic_vitalsDictonary
valueForKey:@"taken_date"],[dic_vitalsDictonary valueForKey:@"taken_time"]];
break;
case 1:
cell.textLabel.text = @"Height";
NSString * str_height = [[dic_vitalsDictonary valueForKey:@"height"] floatValue]
> 0 ? [dic_vitalsDictonary valueForKey:@"height"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_height];
break;
case 2:
cell.textLabel.text = @"Weight";
NSString * str_weight = [[dic_vitalsDictonary valueForKey:@"weight"] floatValue] >
0 ? [dic_vitalsDictonary valueForKey:@"weight"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_weight];
break;
case 3:
cell.textLabel.text = @"Temperature";
NSString * str_temprature = [[dic_vitalsDictonary valueForKey:@"temp"] floatValue]
> 0 ? [dic_vitalsDictonary valueForKey:@"temp"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_temprature];
break;
case 4:
cell.textLabel.text = @"Blood Pressure";
NSString * str_lowbp = [dic_vitalsDictonary valueForKey:@"lowbp"];
NSString * str_highbp = [dic_vitalsDictonary valueForKey:@"highbp"];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@/%@",[self
setDecimalFormatForString:str_lowbp],[self setDecimalFormatForString:str_highbp]];
break;
case 5:
cell.textLabel.text = @"Blood Sugar";
NSString * str_bs1 = [dic_vitalsDictonary valueForKey:@"bs_1"];
NSString * str_bs2 = [dic_vitalsDictonary valueForKey:@"bs_2"];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@/%@",[self
setDecimalFormatForString:str_bs1],[self setDecimalFormatForString:str_bs2]];
break;
case 6:
cell.textLabel.text = @"Pulse";
NSString * str_pulse = [[dic_vitalsDictonary valueForKey:@"pulse"] floatValue] > 0
? [dic_vitalsDictonary valueForKey:@"pulse"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_pulse];
break;
case 7:
cell.textLabel.text = @"Resp";
NSString * str_resp = [[dic_vitalsDictonary valueForKey:@"resp"] floatValue] > 0 ?
[dic_vitalsDictonary valueForKey:@"resp"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_resp];
break;
case 8:
cell.textLabel.text = @"Oxygen";
NSString * str_oxyzen = [[dic_vitalsDictonary valueForKey:@"oxygen"] floatValue] >
0 ? [dic_vitalsDictonary valueForKey:@"oxygen"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_oxyzen];
break;
case 9:
cell.textLabel.text = @"Fatmass";
NSString * str_fatmass = [[dic_vitalsDictonary valueForKey:@"fatmass"] floatValue]
> 0 ? [dic_vitalsDictonary valueForKey:@"fatmass"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_fatmass];
break;
case 10:
cell.textLabel.text = @"LBM";
NSString * str_lbm = [[dic_vitalsDictonary valueForKey:@"lbm"] floatValue] > 0 ?
[dic_vitalsDictonary valueForKey:@"lbm"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_lbm];
break;
case 11:
cell.textLabel.text = @"HC";
NSString * str_hc = [[dic_vitalsDictonary valueForKey:@"hc"] floatValue] > 0 ?
[dic_vitalsDictonary valueForKey:@"hc"] : @"";
cell.detailTextLabel.text = [self setDecimalFormatForString:str_hc];
break;
case 12:
cell.textLabel.text = @"Peakflow";
NSString * str_peakflow = [[dic_vitalsDictonary valueForKey:@"peakflow"]
floatValue] > 0 ? [dic_vitalsDictonary valueForKey:@"peakflow"] : @"";
cell.detailTextLabel.text =[self setDecimalFormatForString:str_peakflow];
break;
default:
break;
}
// Set the Background Image for TableviewCell.
// if 1st row then we are showing different image to Display Vitals Date.
if (indexPath.row==0) {
cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage
imageNamed:@"HeaderNavigation.png"]];
}
else{
// Set the Background Image for TableviewCell.
cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage
imageNamed:@"cell_background.png"]];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
Пожалуйста, предложите какой-то способ преодолеть этот сценарий. Я много пробовал, но ничто, похоже, не работает так, как я предполагаю. Я хочу предотвратить повторное использование ячейки, чтобы она не повторялась во время прокрутки.
lbl_title используется только в строке 0 справа? – Joshua
Это происходит потому, что выделена только ячейка первого времени, и вы повторно используете ячейку, что означает, что при прокрутке вниз ячейки в ноль будет снята другая ячейка, и она отобразит ее текст в зависимости от его индексного пути. Таким образом, один простой способ - использовать различный идентификатор ячейки для первой ячейки, поэтому и другой идентификатор ячейки для других. –