2009-10-22 10 views
1

J'ai un simple UITableViewController dans un UINavigationController qui affiche une liste de chaînes d'un tableau avec le bouton Edit/Done par défaut sur le côté droit de la barre de navigation.Quel est le moyen le plus simple d'ajouter une ligne dans UITableView avec une chaîne fournie par l'utilisateur?

Lorsque vous appuyez sur le bouton Modifier, le UITableView s'anime correctement et affiche les icônes moins rouges à supprimer. En appuyant sur le bouton Supprimer supprime la ligne de la vue de la table et le tableau (implémenté dans la méthode tableView:commitEditingStyle:forRowAtIndexPath: du UITableViewController).

Je voudrais maintenant permettre à l'utilisateur d'ajouter une ligne à la vue (et ajouter la chaîne au tableau sous-jacent), mais je ne suis pas sûr comment faire pour le faire. La méthode commitEditingStyle a else if (editingStyle == UITableViewCellEditingStyleInsert), mais je ne sais pas comment l'utilisateur peut entrer la chaîne. J'ai lu le Guide de programmation Table View (plus précisément the example of adding a table-view row), mais cela semble nécessiter une nouvelle sous-classe UIViewController juste pour obtenir une chaîne de l'utilisateur.

Y a-t-il un moyen plus simple?

Répondre

2

La création d'un autre contrôleur de vue est probablement la solution la plus simple à long terme. Vous pouvez présenter modalement en appelant

SomeViewController* theViewController = [[SomeViewController alloc] init]; 
[self presentModalViewController: theViewController animated: YES]; 
[theViewController release]; 

Lorsque le theViewController est prêt à aller, il peut appeler

[[self parentViewController] dismissModalViewControllerAnimated: YES]; 

OU vous pouvez configurer un protocole pour votre nouveau contrôleur de vue il peut informer l'original vue contrôleur d'achèvement et d'envoyer une valeur de retour, si vous vouliez un NSString retour vous pouvez utiliser

@protocol MyViewControllerDelegate 
- (void)myViewControllerDelegate: (MyViewController*)myViewController didFinishWithValue: (NSString*)theString; 
@end 

MyViewController aurait alors un Deleg mangé propriété

@interface MyViewController 
{ 
    id<MyViewControllerDelegate> delegate; 
} 
@property(nonatomic,assign) id<MyViewControllerDelegate> delegate; 
@end 

Si vous utilisez la méthode de protocole votre contrôleur de vue original adoptera ce protocole et rejeter le point de vue modal lui-même quand il reçoit ce message.

J'espère que cela aide, il peut sembler un peu compliqué au début, mais cela rend la collecte de données très facile.

0

Vous pouvez utiliser un UIAlertView ou une classe similaire. Faites simplement apparaître la vue modale pour demander la chaîne, établir les bons rappels, puis placez-la dans votre source de données.

Vous pouvez également insérer une cellule avec un UITextView et un espace réservé «Tap to Edit», puis sur les callbacks textView, supprimez le textView et affichez la chaîne. Une modification supplémentaire nécessiterait d'effectuer un zoom avant ou d'effectuer autre chose

Questions connexes