2

私は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;

}

このシナリオを乗り越える方法を提案してください。私は多くのことを試しましたが、意図したとおりに機能するものは何もないようです。スクロール中にセルが繰り返されないように、セルが再利用されないようにしたい。

4

7 に答える 7

0

次のようなことができると思います:

 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.

        UILabel *topLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 2, 320, 33)];
        topLabel.textAlignment = UITextAlignmentCenter;
       topLabel.font = [UIFont boldSystemFontOfSize:14];
       topLabel.textColor = [UIColor whiteColor];
       topLabel.backgroundColor = [UIColor clearColor];
       topLabel.tag = 1;// unique for all subviews of cell
       [cell.contentView addSubview:topLabel];

 }
  topLabel = (UILabel *)[cell.contentView viewWithTag:1];
  topLabel.text = nil;
  cell.detailTextLabel.text = nil;
  cell.textLabel.text = nil;
  switch (indexPath.row) {
    case 0: 

        topLabel.text = [NSString stringWithFormat:@"%@ %@",[dic_vitalsDictonary 
    valueForKey:@"taken_date"],[dic_vitalsDictonary valueForKey:@"taken_time"]];
        break;
  //OTHER CODE
于 2013-05-22T07:34:55.670 に答える
0

これは、cell==nil 条件の場合にタイトル ラベルを構成しているためです。毎回実行されるわけではありません。したがって、以下のコードを使用して要件を満たすことができます。タイトル ラベルをグローバルとして宣言する必要はありません。

    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.
    UILabel *lbl_title= [[UILabel alloc] initWithFrame:CGRectMake(0, 2, 320, 33)];
    lbl_title.textAlignment = UITextAlignmentCenter;
    lbl_title.tag=21;
    lbl_title.font = [UIFont boldSystemFontOfSize:14];
    lbl_title.textColor = [UIColor whiteColor];
    lbl_title.backgroundColor = [UIColor clearColor];
    [cell addSubview:lbl_title];
}

if (indexPath.row==0) {
    UILabel *titleLabel=(UILabel*)[cell viewWithTag:21];
    titleLabel.text=@"May 1 ,2013 17:23:49";
}else{
    UILabel *titleLabel=(UILabel*)[cell viewWithTag:21];
    titleLabel.text=@"";
}
于 2013-05-22T07:33:48.217 に答える
0

すべてのセルに一意の識別子を付けてみてください。

 NSString *CellIdentifier =[NSString stringWithFormat:"Cell %d",indexpath.row];

これが正しい方法かどうかはわかりませんが、問題は解決するはずです。

于 2013-05-22T07:25:43.357 に答える
0

switch ステートメントの前に を設定してcell.textLabel.hidden = NO;から、最初の行でそれを非表示にしてみてください。

 case 0:
    cell.textLabel.hidden = YES; //this is added
    lbl_title.text = [NSString stringWithFormat:@"%@ %@",[dic_vitalsDictonary 
    valueForKey:@"taken_date"],[dic_vitalsDictonary valueForKey:@"taken_time"]];
    break;
于 2013-05-22T07:26:05.477 に答える
-1

セルを再利用したくない場合は、このコードを更新してください

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];
    }

}

これとともに

UITableViewCell * 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];
    }
于 2013-05-22T07:25:44.160 に答える