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 № 1La 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;