2016-05-18 7 views
0

自分のセルにedittextがあります。スクロールアップまたはスクロールすると、最初のセルの値が最後のセルと2番目の最後のセルに設定されます。私はそれがセルをデキューするためだと思うが、私はこの問題を解決することができない。ここでは、セルのための私のコードは次のとおりです。iOS:UItableview dequeueReusableCellWithIdentifierの繰り返し値

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    _myTableView = tableView; 
    AddTaskTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"addTaskCell" forIndexPath:indexPath]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    AddTaskDetails *task =[self.tasksArray objectAtIndex:indexPath.row]; 
    cell.addHours.delegate = self; 
    cell.taskDetails.text =task.taskName; 
    _hoursTextField = cell.addHours; 
    _hoursTextField.delegate = self; 
    cell.addHours.tag = indexPath.row; 
    cell.addDescriptionBtn.tag = indexPath.row; 
    [cell.addDescriptionBtn addTarget:self action:@selector(didTapAddDescButton:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.addHours addTarget:self action:@selector(editStart:) forControlEvents:UIControlEventEditingDidBegin]; 
    [cell.addHours addTarget:self action:@selector(editEnd:) forControlEvents:UIControlEventEditingDidEnd]; 
    [cell.addHours addTarget:self 
        action:@selector(textFieldDidChange:) 
     forControlEvents:UIControlEventEditingChanged]; 
    if(task.isTextRed) 
    { 
     cell.taskDetails.textColor = [UIColor colorWithRed:255 green:0 blue:0 alpha:1.0]; 
     cell.addHours.textColor = [UIColor colorWithRed:255 green:0 blue:0 alpha:1.0]; 
    } 
    else 
    { 
     cell.taskDetails.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]; 
     cell.addHours.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]; 

    } 
    if(task.isBillable) 
    { 
     cell.backgroundColor = [UIColor whiteColor]; 
    } 
    else 
    { 
     cell.backgroundColor = [UIColor lightGrayColor]; 
    } 
    AddTaskDetails *task_1 =[self.tasksArray objectAtIndex:indexPath.row]; 
    if(task_1.hours>0) 
    { 
     NSString *hours = [[NSString alloc]initWithFormat:@"%d",task_1.hours]; 
     cell.addHours.text = hours; 
    } 
    else 
    { 
     cell.addHours.placeholder = @"0"; 
    } 
    NSString *hours = [[NSString alloc]initWithFormat:@"Total Hours: %ld",_totalHours]; 
    if(_totalHours<=24) 
    { 
     _labelTotalHours.text = hours; 
    } 
    return cell; 
} 

このスクリーンショットは、正しい値である。この写真で

Correct Image

4本値もありませんが、自動的に割り当てられます間違った値であり、アレイ。

ただ、簡単な概要

Wrong Image

+0

あなたが設定されていません(再)んた場合を持つようにそれを設定しますラベルのテキスト。デバッガを使用してトレースし、見つけます。また、特にスクロール時に、タイミングを混乱させるブレークポイントとして 'NSLog()'ステートメントを使用してください。 – Avi

+0

'NSLog()'を使用して配列の値をチェックしましたが、配列の値は正しいですが、上下にスクロールしたり、テーブルビューをリロードしたりすると誤った値が設定されます。 –

答えて

2

、つまり、あなたの答えを得る

のUITableViewは、高度に最適化されたため、メモリ内にのみオンスクリーン表示される行を維持しています。現在、すべての行のセルはプールにキャッシュされ、再利用され、再生成されません。ユーザーはUITableViewをスクロールするたびに、Pool内に隠れた行を追加し、次に見える行のためにそれらを再利用します。

だから、今、あなたの方法のcellForRowAtIndexPathであなたの答え

に来て -

は必ず各インデックスの値をリセットします。元のために

。あなたのセルにUILabelラベルがある場合は、cellForRowAtIndexPathの中にそれを設定しながら、すべての条件に必要な値を設定する必要があります。あなたはそれが空になりたい場合は、コード内で「」

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    if(today){ 
    label = "today"; 
    } 
    else if(yesterday){ 
    label = "yesterday"; 
    } 
else{ 
    label = ""; **//this is important** 
} 

return cell; 
} 

ISSUE

if(task_1.hours>0) 
    { 
     NSString *hours = [[NSString alloc]initWithFormat:@"%d",task_1.hours]; 
     cell.addHours.text = hours; 
    } 
    else 
    { 
     cell.addHours.text = ""; // YOU NEED TO SET TEXT TO EMPTY AS WELL 
     cell.addHours.placeholder = @"0"; 
    } 
+0

私はこれをしています、ここにコードです: 'AddTaskDetails * task_1 = [self.tasksArray objectAtIndex:indexPath.row]; if(task_1.hours> 0) { NSString * hours = [[NSString alloc] initWithFormat:@ "%d"、task_1.hours]; cell.addHours.text = hours; } else { cell.addHours.placeholder = @ "0"; } ' –

+0

私の答えが更新されました。あなたはcell.addHours.text =" ";同様に、プレースホルダーを獲得する設定、テキストをクリアする –

+0

それはありがとうalot :) –

1
After Declate cell you put below code `if(cell == nil) 
{ 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:MyIdentifier] autorelease]; 
} 
else 
{ 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:MyIdentifier] autorelease]; 
} 

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

[cell.contentView clearsContextBeforeDrawing];`