/ / UIPopoverController: mise à jour de la vue après sa fermeture - ios, objective-c, uipopovercontroller

UIPopoverController: mise à jour de la vue après son licenciement - ios, objective-c, uipopovercontroller

Sur le simulateur iPad, j'ai un ViewController A qui présente un UIPopoverController dont contentViewController est ViewController B, à l'intérieur duquel j'ai un bouton pour fermer l'UIPopoverController.

Lorsqu'il est rejeté, je dois mettre à jour la vue de ViewController A en fonction d'un champ dans ViewController B.

Pour ce faire, je déclare ViewController A en tant que propriété (faiblesse) de ViewController B de sorte que dans ViewController B où il rejette le popover, je peux dire:

[self.viewControllerA.popover dismissPopoverAnimated:YES];
self.viewControllerA.popover = nil;
self.viewControllerA.textLabel.text = self.someField

Est-ce la bonne façon de procéder? Puisqu'il n'y a pas de rappel lorsque nous rejetons le popover de façon pragmatique, je ne peux pas penser à une meilleure solution.

Quelqu'un a une meilleure idée? Passer des contrôleurs de vue me semble maladroit.

Réponses:

0 pour la réponse № 1

La meilleure façon est d’utiliser Delegation, déclarez simplement le délégué dans votre contrôleur B comme

@protocol ControllerSDelegate <NSObject>
-(void) hidePopoverDelegateMethod;
@end

et appeler cela sur l'action pour passer les données et licencier le contrôleur comme

if (_delegate != nil) {
[_delegate hidePopoverDelegateMethod];
}

et

dans votre contrôleur A, vous pouvez gérer cet appel délégué

-(void) hidePopoverDelegateMethod {
[self.paymentPopover dismissPopoverAnimated:YES];
if (self.paymentPopover) {
self.paymentPopover = nil;
}
[self initializeData];
}

0 pour la réponse № 2

Je pense que les délégués ou l'envoi de NSNotification feront mieux.

Remarque:

Un changement de la séquence d'exécution améliorera davantage votre code actuel.

self.viewControllerA.textLabel.text = self.someField
[self.viewControllerA.popover dismissPopoverAnimated:YES];
self.viewControllerA.popover = nil;