试图关闭故事板呈现的弹出框

Posted

技术标签:

【中文标题】试图关闭故事板呈现的弹出框【英文标题】:Trying to dismiss a popover that was presented by storyboard 【发布时间】:2017-08-22 16:19:38 【问题描述】:

我在 SO 上看到很多关于此的问题,但他们的回答对我没有任何帮助。

我正在使用情节提要展示一个弹出框。过了一会儿,我想以编程方式关闭该弹出框。

我已经尝试了很多东西,但最后一次尝试涉及为弹出框内的视图控制器创建一个类。类是这样的:

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

然后,我从主代码中发布类似的通知

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

什么都没有发生...弹出窗口继续在那里。

为什么?

【问题讨论】:

分享完整代码,如果可以的话 这是完整的代码。我单击一个按钮,该按钮显示来自此类的 ViewController。我稍后会尝试忽略它。它什么都不做。 【参考方案1】:

创建通知观察者时,您必须将self 替换为nil(用于object 参数),因为发布通知的不是self

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

【讨论】:

出色?我认为这个对象是分配通知的对象!谢谢!现在完美运行!!! 很高兴我能帮上忙 :)

以上是关于试图关闭故事板呈现的弹出框的主要内容,如果未能解决你的问题,请参考以下文章

在通用故事板中使用 present 作为弹出框

故事板 - 弹出框的委托

为啥故事板弹出框在 Swift 中的设备上不起作用?

iPad 故事板应用程序 - 弹出框和模态代表

Xcode 自动布局故事板预览不显示容器视图

有哪些用于应用程序故事板的工具,包括 GUI? [关闭]