2017-08-22 9 views
0

Je vois beaucoup de questions à ce sujet sur SO, mais leurs réponses ne me font rien. Je présente un popover utilisant le storyboard. Après un moment, je veux rejeter ce popover par programme.Essayer de rejeter un popover qui a été présenté par storyboard

J'ai essayé beaucoup de choses mais le dernier essai consiste à créer une classe pour le contrôleur de vue qui est à l'intérieur du survol. La classe est comme ceci:

- (id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
    [self initializeNotification]; 
    } 
    return self; 
} 


- (void) initializeNotification { 
    [[NSNotificationCenter defaultCenter] 
    addObserverForName:@"closePopover" 
    object:self 
    queue:[NSOperationQueue mainQueue] 
    usingBlock:^(NSNotification * _Nonnull note) { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
    }]; 
} 

puis, à partir du code principal que je posterai une notification comme

[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"closePopover" 
        object:self]; 

et rien ne se passe ... la popover continue là.

pourquoi?

+0

Partager code complet, si vous le pouvez – Krunal

+0

c'est la pleine code. Je clique sur un bouton, le bouton affiche un ViewController de cette classe. J'essaie de rejeter ça plus tard. Ça ne fait rien. – SpaceDog

Répondre

2

Vous devez remplacer self avec nil (pour le paramètre object) lors de la création de l'observateur de notification car il n'est pas self que les messages de la notification:

[[NSNotificationCenter defaultCenter] addObserverForName:@"closePopover" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}]; 
+0

BRILLANT? Je pensais que cet objet était l'objet de l'attribution de la notification! MERCI! Fonctionne parfaitement maintenant !!! – SpaceDog

+1

Je suis heureux d'avoir pu aider :) –