Search code examples
iosuistoryboarduipopovercontrollerdismiss

Trying to dismiss a popover that was presented by storyboard


I see a lot of questions about this on SO but their answers do nothing to me.

I am presenting a popover using storyboard. After a while I want to dismiss that popover programmatically.

I have tried many things but the last try involves creating a class for the view controller that is inside the popover. The class is like this:

- (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];
   }];
}

then, from the main code I post a notification like

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

and nothing happens... the popover continues there.

why?


Solution

  • You have to replace self with nil (for the object parameter) when creating the notification observer since it is not self that posts the notification:

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