2012-02-13 52 views
0

我爲每行都有一個帶有TextField的TableView。 TableView由兩部分組成。 當用戶點擊KeyBoard的返回按鈕時,我在NSUserDefault上設置TextField的文本。 在cellForRowAtIndexPath方法中,我讀取NSUserDefault上的文本值。 爲什麼當我滾動TableView時,數據改變了?滾動UITableView更改UITextField中存儲在NSUserDefault中的數據

cellForRowAtIndexPath

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) {   
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

//set cell value from NSArray 
if ((indexPath.section) == 0) { 
    cell.textLabel.text = [sicurezzaSullaStrada objectAtIndex:indexPath.row]; 
} else { 
    cell.textLabel.text = [infoVeicolo objectAtIndex:indexPath.row]; 
} 


//set TextField value from NSUserDefault 
if (indexPath.section == 0) { 
    //first section 
    if (indexPath.row == 0) { 
     TextFieldCell = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 80, 21)]; 
     TextFieldCell.adjustsFontSizeToFitWidth = YES; 
     TextFieldCell.placeholder = @"Enter text"; 
     TextFieldCell.delegate = self; 
     [TextFieldCell setText:[[NSUserDefaults standardUserDefaults] objectForKey:@"stringPesoKg"]]; 
     cell.accessoryView = TextFieldCell; 
     } 
    if (indexPath.row == 1) { 
     TextFieldCell = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 80, 21)]; 
     TextFieldCell.adjustsFontSizeToFitWidth = YES; 
     TextFieldCell.placeholder = @"Enter Text"; 
     TextFieldCell.delegate = self; 
     [TextFieldCell setText:[[NSUserDefaults standardUserDefaults] objectForKey:@"stringPostiLettoOmologati"]]; 
     cell.accessoryView = TextFieldCell; 
    } else { 
    //second section 
    if (indexPath.row == 0) { 
     //Riga relativa alla Data di immatricolazione 
     TextFieldCell = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 80, 21)]; 
     TextFieldCell.adjustsFontSizeToFitWidth = YES; 
     TextFieldCell.placeholder = @"Enter Text"; 
     TextFieldCell.delegate = self; 
     [TextFieldCell setText:[[NSUserDefaults standardUserDefaults] objectForKey:@"stringDataImmatricolazione"]]; 
     cell.accessoryView = TextFieldCell; 
    } 

,然後textFieldDidEndEditing

if (posizSect == 0) { 
    if (posizRow == 0) { 
     NSUserDefaults *stringDefaultPesoKg = [NSUserDefaults standardUserDefaults]; 
     [stringDefaultPesoKg setObject:textField.text forKey:@"stringPesoKg"]; 
    } 
    if (posizRow == 1) { 
     NSUserDefaults *stringDefaultPostiLettoOmologati = [NSUserDefaults standardUserDefaults]; 
     [stringDefaultPostiLettoOmologati setObject:textField.text forKey:@"stringPostiLettoOmologati"]; 
    } 
    if (posizRow == 2) { 
     NSUserDefaults *stringDefaultPostiLettoOmologati = [NSUserDefaults standardUserDefaults]; 
     [stringDefaultPostiLettoOmologati setObject:textField.text forKey:@"stringLunghezzaMax"]; 
    } else { 
    if (posizRow == 0) { 
     NSUserDefaults *stringDefaultPesoKg = [NSUserDefaults standardUserDefaults]; 
     [stringDefaultPesoKg setObject:textField.text forKey:@"stringDataImmatricolazione"]; 
    } 

didSelectRowAtIndexPath:,我設置PosizRow和PosizSect的價值:

posizRow = indexPath.row; 
posizSect = indexPath.section; 

感謝,從 亞歷山德羅意大利

回答

0

的原因,數據的變化,就是當你滾動他們關閉屏幕的UITableViewCells得到離隊。數據然後在這一點上消失了,當您向後滾動時,單元格會重新填充初始值(而不是更改後的值)。我不知道如何解決它,現在我正在尋找這個解決方案。當我找到它時,我會將它鏈接到它。

*編輯*** 確定這裏就是你要做的:

首先,你需要讓你的ViewController的UITextFieldDelegate委託。然後,你需要實現:

  • (無效)textFieldDidEndEditing:(的UITextField *)文本框

在我的情況下,用戶界面代碼中動態進行的,所以我有一個NSMutableDictionary包含名稱的所有領域。所以,在我的代碼我做到以下幾點:

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    NSArray *fields = [editTexts allKeysForObject:textField]; 

    if(fields.count > 0) 
    { 
     [clonedItem setValue:textField.text forKey:[fields objectAtIndex:0]]; 
    } 
} 

如果你有作爲屬性,那麼你就需要另一種方式來更新你的存儲變量的文本字段。例如,您可以在textField上使用標籤來標識哪個字段。