Quel est le moyen le plus simple d’ajouter une ligne dans un UITableView avec une chaîne fournie par l’utilisateur?

StackOverflow https://stackoverflow.com/questions/1607743

  •  05-07-2019
  •  | 
  •  

Question

J'ai un simple UITableViewController dans un UINavigationController qui affiche une liste de chaînes d'un tableau avec le bouton Editer / Terminé par défaut sur le côté droit de la navigation. bar.

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

Je voudrais maintenant autoriser l'utilisateur à ajouter une ligne à la vue (et à ajouter la chaîne au tableau sous-jacent), mais je ne sais pas comment s'y prendre. La méthode commitEditingStyle a else si (publishingStyle == UITableViewCellEditingStyleInsert) , mais je ne sais pas comment obtenir que l'utilisateur saisisse la chaîne.

J'ai lu le Guide de programmation en mode Table (plus précisément exemple d'ajouter une ligne de vue tableau ), mais cela semble nécessiter un nouveau UIViewController sous-classe juste pour obtenir une chaîne de l'utilisateur.

N'y a-t-il pas de moyen plus simple?

Était-ce utile?

La solution

Créer un autre contrôleur de vue sera probablement le moyen le plus simple à long terme. Vous pouvez le présenter de manière modale en appelant

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

Lorsque theViewController est prêt à partir, il peut appeler

[[self parentViewController] dismissModalViewControllerAnimated: YES];

OU vous pouvez configurer un protocole pour votre nouveau contrôleur de vue afin qu'il puisse notifier son achèvement au contrôleur de vue d'origine et renvoyer une valeur. Si vous souhaitez une chaîne NSString, vous pouvez utiliser

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

MyViewController aurait alors une propriété de délégué

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

Si vous utilisez la méthode du protocole, votre contrôleur de vue d'origine adoptera ce protocole et rejettera la vue modale elle-même à la réception de ce message.

J'espère que cela aidera, cela peut sembler un peu compliqué au début, mais cela facilite la collecte de données.

Autres conseils

Vous pouvez utiliser vous-même une classe UIAlertView ou similaire. Ouvrez la vue modale pour demander la chaîne, établissez les bons rappels, puis insérez-la dans votre source de données.

Vous pouvez également insérer une cellule avec une UITextView et un " Tap to Edit " placeholder, puis sur les rappels textView, supprimez textView et affichez la chaîne. Une édition ultérieure aurait besoin d’explorer ou de faire autre chose

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top