2011-09-29 6 views
0

Je reçois un problème étrange. J'ai un UITableViewCell personnalisé et chaque cellule a un UIButton et UITextField. Lorsque le bouton est cliqué, il change la valeur du champ de texte en une constante.cellForRowAtIndexPath insertion dans le tableau

maintenant dans la méthode cellForRowAtIndexPath je ceci:

folderTitleTextView.tag=indexPath.row; 
    [arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row]; 
    NSLog(@"indexpath.row:%i", indexPath.row); 
    NSLog(@"text fields count %i", [arrayOfTextFields count]); 

Donc, si j'ai deux cellules, puis à chaque fois que je recharge la table, il ajoute deux objets aux arrayofTextFields, même si elle doit remplacer le ceux qui existent Donc, si j'ai deux cellules et je recharge la table 3 fois, puis pour certains arrayOfTextFields raison compte est 8.

Répondre

1

Ce folderTitleTextView.tag=indexPath.row; est pas une bonne idée parce que tout commence par une balise de 0, de sorte que lors de l'accès des vues avec viewWithTag:0 ou lors de la configuration de la ligne 0, vous obtiendrez des résultats bizarres.

Je suggère de vérifier également le nombre d'éléments dans arrayOfTextFields et utiliser [arrayOfTextFields replaceObjectAtIndex:indexPath.row withObject:folderTitleTextView]; ou [arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row]; en fonction du nombre actuel de arrayOfTextFields

Essayez ceci:

folderTitleTextView.tag = (indexPath.row + 100); 
if ([arrayOfTextFields count] <= indexPath.row) { 
    [arrayOfTextFields insertObject:folderTitleTextView atIndex:indexPath.row]; 
} else { 
    [arrayOfTextFields replaceObjectAtIndex:indexPath.row withObject:folderTitleTextView]; 
} 
NSLog(@"indexpath.row:%i", indexPath.row); 
NSLog(@"text fields count %i", [arrayOfTextFields count]); 
+0

Merci pour votre aide. J'ai été capable de résoudre le problème avec ceci: 'if (indexPath.row <[arrayOfTextFields count]) [arrayOfTextFields remplacerObjectAtIndex: indexPath.row withObject: folderTitleTextView]; sinon [arrayOfTextFields addObject: folderTitleTextView]; ' – Snowman

+0

Très cool! Je suis content que vous l'ayez corrigé, @mohabitar. – chown

1

La question est ce que vous essayez de faire ?

À l'heure actuelle, vous ajoutez le textView à un tableau chaque fois qu'une cellule est affichée.

Si vous avez 1 cellule, vous avez 1 textView dans le tableau car cellForRowAtIndexPath: a été appelée 1 fois.
Si vous ajoutez une autre cellule pour 2 cellules au total cellForRowAtIndexPath sera appelée 2 fois de plus et ajoutera 2 textViews au tableau qui en a déjà un -> 3
Si vous ajoutez une autre cellule cellForRowAtIndexPath ajoute 3 textViews supplémentaires au 3 qui sont déjà là -> 6

Voilà pour l'explication de vos résultats. Ma suggestion est de se débarrasser de ce tableau et de se débarrasser de l'étiquette, très probablement ceux-ci ne sont pas nécessaires du tout.

vous pouvez accéder à la cellule avec quelque chose comme ceci:

- (IBAction)buttonPressed:(UIButton *)sender { 
    UIView *contentView = [sender superview]; 
    UITableViewCell *cell = (UITableViewCell *)[contentView superview]; 
    // you should assign a tag to the textField of your cell. Use the same tag for each textView in all cells. 
    UITextField *textField = (UITextField *)[cell viewWithTag:42]; 
    textField.text = @"Foo"; 
} 
+0

Chaque cellule personnalisée a un UITextField qui contient le titre des cellules et un bouton qui a activé le champ de texte pour l'éditer et l'affecte en tant que premier répondeur. Donc ce que j'essaie de faire est de faire en sorte que lorsque le bouton est pressé, il accède à une certaine vue de texte de la matrice et l'édite. Cependant, j'ai besoin de définir leurs balises afin que je puisse accéder à la bonne vue de texte. Si j'ai 5 cellules, alors il y a 5 boutons, et je ne mets pas leurs balises, alors quand je l'appuie, il ne saura pas quel champ de texte éditer. – Snowman

+0

avez-vous vu la deuxième partie que j'ai ajoutée? Vous n'avez probablement pas besoin de balises et vous n'avez pas besoin de tableaux dans lesquels vous stockez textViews. –

+0

Hmm c'est une bonne idée, mais ma cellule personnalisée n'a pas sa propre classe et appartient à la même classe qui possède la table.Donc, je ne pouvais pas accéder à folderTitleTextView d'une cellule comme ça .. ou pourrais-je? – Snowman

Questions connexes