2010-07-09 6 views
0

Je suis conscient que pour préserver l'utilisation de la mémoire, UITableViewCells sont réutilisés lors du défilement. J'ai quelques coutume UITableViewCells qui ont UITextFields dans eux. Après que le texte a été entré dans le UITextField et que je défile, ce texte est perdu à cause de la réutilisation de la cellule.SDK iPhone: la création de texte UITextField dans un UITableViewCell personnalisé persiste par défilement?

Comment puis-je faire en sorte que ce texte soit conservé par défilement? Je pense que je peux stocker le texte de chaque cellule dans son propre index d'un NSMutableArray. Ensuite, lorsque la cellule est réutilisée, je peux la repeupler avec les données du tableau.

Comment ferais-je cela? Quelqu'un aurait-il l'amabilité de poster un échantillon de code?

Répondre

1

sample.h

@interface sample : UIViewController <UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate> 
{ 

} 

@end 

sample.m

-(void)viewWillAppear:(BOOL)animated 
{ 

    arrData = [[NSMutableArray alloc]init]; 
    for (int i=0; i<10; i++) // 10- number of fields 
    [arrData addObject:@""]; 
} 


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

return [arrData count]; 

} 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    UITextField *txt = [[UITextField alloc]initWithFrame:frm]; 
    txt.autocorrectionType = UITextAutocorrectionTypeNo; 
    txt.tag = indexPath.row; 
    txt.delegate = self; 
    txt.text = [arrData objectAtIndex:indexPath.row]; 

    [cell addSubview:txt]; 
    [txt release]; 

    return cell; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

} 

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [arrData replaceObjectAtIndex:[textField tag] withObject:textField.text]; 
} 
+0

Vous devriez vérifier si (cellule == nil) avant affectation et le texte de textfield devrait être fixé en dehors de la condition. Pour obtenir la référence textfield appropriée, vous pouvez utiliser [subviews de cellule] et trouver le champ de texte avec son 'tag' unique (définir le tag textfield lorsque vous l'attribuez) ou vous pouvez sous-classer UITableViewCell et ajouter UITextField dans ses membres de données. – Sanniv

+0

Merci beaucoup pour votre aide. Je vais mettre en œuvre cela, et vous faire savoir comment ça se passe. –

Questions connexes