2016-05-18 79 views
0

我在我的單元格中有一個編輯文本,當我向上滾動或向下滾動時,它將第一個單元格的值設置爲最後一個單元格和第二個最後一個單元格。我認爲這是因爲它使小區出隊,但我無法解決這個問題。這裏是我的單元代碼:iOS:在dequeueReusableCellWithIdentifier上的UItableview重複值

-(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

在這種PIC 4是自動分配不正確的值,這個值也是不陣列。

Wrong Image

+0

你有這樣的情況,你不(重新)設置標籤的文字。使用調試器追蹤並找到它。或者使用'NSLog()'語句,因爲斷點與時間混亂,特別是在滾動時。 – Avi

+0

我已經使用了NSLog()和檢查數組值,數組有正確的值,但當我向上/向下滾動或重新加載表視圖時,它設置了錯誤的值(數組有正確的值)。 –

回答

2

只是一個簡短的概述,所以你得到你的答案

UITableView的高度優化,從而只保留當前屏幕上顯示的行存儲器中。現在,所有行單元格都緩存在Pool中,並且可以重用並不會重新生成。每當用戶滾動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; 
} 

問題代碼

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];如果(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 =「」;以及設置佔位符贏得; t清除文本 –

+0

它的作品非常感謝:) –

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];` 
相關問題