2010-02-22 19 views
0

J'ai une cellule tableview avec un textview personnalisé, je me demande maintenant comment j'accède éventuellement au texte dans la zone de texte après que le texte a été édité/ajouté.iphone sdk - TableView Cell avec TextView personnalisé - Obtenir de nouvelles données

Normalement, je sais comment cela se fait lorsque je dessine le champ de texte à travers IB, mais ma cellule textview est dessinée dynamiquement.

(à savoir, je voudrais saisir les données qui sont mises à jour en detailLabel.text)

Voici le code lié à adapter à votre réponse. Merci encore!

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


    //Big Text Box 
    UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, 500, 150)]; 
    detailLabel.tag = 20; 
    [cell.contentView addSubview:detailLabel]; 
    detailLabel.layer.borderWidth = 1; 
    detailLabel.layer.borderColor = [[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.9] CGColor]; 
    detailLabel.layer.cornerRadius = 10; 
    detailLabel.font = [UIFont fontWithName:@"Helvetica" size:17]; 
    [detailLabel release]; 

} 

UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20]; 

switch (indexPath.row) { 

case 0: 
    detailLabel.text = @"no"; 
    break; 
default: 
    detailLabel.text = [NSString stringWithFormat:@"%d", indexPath.row]; 
    detailLabel.hidden = NO;  

} 

Répondre

3

Vous devez écouter les messages envoyés par UITextView. Donc, regardez pour implémenter le protocole UITextViewDelegate et enregistrez la classe d'implémentation avec detailLabel en utilisant sa propriété delegate. Lorsque votre délégué est averti d'un changement dans UITextView, vous devez identifier la cellule qui possède actuellement UITextView

Ce faisant, vous devez vous rappeler que les cellules peuvent être réutilisées.

Je commencerais en regardant la méthode suivante dans la classe UITableView:

- (NSArray *)visibleCells 

Nous savons que si l'utilisateur a fait une modification du contenu du UITextView il doit en être à l'écran et donc être présents dans le tableau pré-mentionné. Pour le trouver, nous utilisons le pointeur vers UITextView qui a changé (c'est un paramètre dans la méthode du protocole textViewDidChange). Il suffit donc de parcourir le tableau visibleCells et de récupérer l'UITextView et de le comparer à l'UITextView qui a changé.

- (void)textViewDidChange:(UITextView *)textView { 
.... 
cellsLabel = (UITextView *) [cell.contentView viewWithTag:20]; 
if (cellsLabel == textView) 
... 

Vous allez maintenant avoir un handle pour une cellule dans UITableView. Pour trouver l'index utiliser la méthode UITableView suivante:

- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell 
+0

Ah, je vois;) premier était le truc dans le .h et la nouvelle méthode est disponible - (void) textViewDidChangeSelection: (UITextView *) textView – oberbaum

+0

OK, alors maintenant je peux accéder au texte dans le champ de texte, mais comment puis-je savoir quelle zone de texte envoie cette information. Disons que j'ai 15 cellules, chacune avec une zone de texte avec des données différentes. Rgds. – oberbaum

+0

Edited réponse originale à clarifier. – mmccomb