2013-02-13 46 views
2

我有一個簡單的表格,每個表單都包含一個文本框。在的cellForRowAtIndexPath:我創建並根據indexPath.row每個單元初始化:快速滾動ios時自定義單元格中的UITextField值問題

case 0: 
{ 
    CellIdentifier = @"TextEditCell"; 
    TextEditCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; 
     cell = [topLevelObjects objectAtIndex:0]; 
    } 

    [cell configureCellWithText: [self.valueArray objectAtIndex:0] 
        placeholder: @"value no.0"] 

    [cell performAction: @selector(saveValue0:) 
     forControlEvent: UIControlEventEditingDidEnd 
       inTarget: self]; 

    return cell; 
} 

configureCellWithText:佔位符:套文本和單元格的文本框的佔位符。 performAction:forControlEvent:inTarget直接引用textField,並將textField的值保存到本地數組,以便在再次使用時保持準確。

問題發生時,我快速滾動表格。來自不同單元的值複製到另一個單元並修改本地數組。我無法找出它爲什麼會發生。任何人有任何想法?如果需要,我可以提供更多的代碼。

回答

0

發生這種情況的原因是您正在重新使用單元格,並且configureCellWithText在單元格被重用後正在運行。要解決這個問題,您可以:

  1. 不要重複使用單元格 - 但這樣會嚴重影響您的性能。
  2. 如果您在6.0上運行,則可以使用tableView:didEndDisplayingCell:forRowAtIndexPath:在單元格滾動屏幕時取消文本設置操作。
  3. 您可以在自定義單元類中創建一個標誌,該標誌在您將某個單元取出時設置。

編輯

因爲我不知道你的電池的工作原理。我很難給你任何更多的sudo代碼概念。

這裏是我的須藤代碼:

泰伯維細胞用於行... - 離隊細胞 - [細胞cancel_previous_action] - 設置新的行動。

+0

選項1和2對我來說不夠好。你能提供關於第三個的更多細節嗎?我在我的TextEditCell類中創建了一個標誌 - 我應該如何在'cellForRowAtIndexPath:'中處理它? 此外,在我的代碼中,每個單元格都具有相同的CellIdentifier - 我應該爲每個單元格分發它嗎? 'dequeueReusableCellWithIdentifier:'中使用的CellIdentifier是否必須與'loadNibNamed:'函數中的相同? (請編輯您的原始答案 - 爲下一代) – deleteme 2013-02-14 12:18:59

相關問題