J'ai deux UITableViewControllers. L'un affiche une list de noms et en appuyant sur n'importe quelle cellule poussera le second TableViewController qui permet à l'user d'éditer le nom dans un UITextField.
Maintenant, je suis en mesure de passer la string de nom du premier TableViewController à la seconde. (Je le fais en créant une propriété dans le second TableViewController que je mets juste avant de pousser le second TableViewController) Mais comment passer la string de nom éditée de la seconde à la première (pour que je puisse mettre à jour la première table avec le nom modifié)?
Créez une propriété masortingcielle mutable dans le premier controller et passez ce tableau et un index au second controller.
FirstController.h
@property (nonatomic,retain) NSMutableArray *mySsortingngs;
FirstController.m
@synthesize mySsortingngs; init { self.mySsortingngs = [NSMutableArray arrayWithCapacity:8]; } didSelectRowAtIndexPath { SecondVC *vc = [[SecondVC new]; [self.theSsortingngs addObject:@"Original Ssortingng"]; // or replaceAtIndex: indexPath.row vc.theSsortingngs = self.mySsortingngs; vc.theIndex = indexPath.row; //push detail vc. }
SecondController.h
@property (nonatomic, retain) NSMutableArray *theSsortingngs; @property (nonatomic ) int theIndex;
SecondController.m
@synthesize theSsortingngs; @synthesize theIndex; doneEditingMethod { [self.theSsortingngs replaceObjectAtIndex: self.theIndex withObject: myNewSsortingng]; }
Je vois principalement trois options:
vous pouvez définir votre model en singleton, facilement accessible depuis tous les autres objects. Dans ce cas, pensez à l'access simultané au model, il en existe;
avoir le model privé au premier controller, mais au lieu de passer la string au deuxième controller, passez un pointeur au model, ainsi vous pouvez lire et écrire dessus;
passer le deuxième controller un pointeur sur le premier, de sorte que vous pouvez le signaler (en appelant une méthode spécifique); C'est ok si vous sous-classz le controller, sinon vous devriez utiliser un délégué.
Une quasortingème option consisterait à utiliser des notifications, mais je pense que 1 ou 2 est la voie à suivre.
Peut-être devriez-vous jeter un coup d'œil au model de délégué qui pourrait vous faire gagner beaucoup de time! 🙂
Vous savez que c'est comme utiliser une source de données UITableView. Avec un délégué (ou une source de données), vous pouvez requestr ou définir des informations à un controller racine.
Peut-être que c'est la meilleure option! (donc google "objective-c délégué")
Bonne chance !
Sont-ils connectés par un controller de navigation?
Si oui, cela pourrait résoudre le problème
// in SecondViewController.m NSArray* controllers = self.navigationController.viewControllers; UITableViewController* firstViewController = [controllers objectAtIndex:controllers.count-2];
Il y a plusieurs moyens de le faire. Personnellement, j'utilise une class tierce pour héberger des strings et je fais juste reference à cette class lorsque je me déplace entre UITableViews.