试图关闭故事板呈现的弹出窗口
Trying to dismiss a popover that was presented by storyboard
我在 SO 上看到很多关于此的问题,但他们的回答对我没有任何帮助。
我正在使用故事板展示弹出窗口。过了一会儿,我想以编程方式关闭该弹出窗口。
我尝试了很多东西,但最后一次尝试涉及为弹出框内的视图控制器创建一个 class。 class 是这样的:
- (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];
}];
}
然后,从主代码我 post 一个像
这样的通知
[[NSNotificationCenter defaultCenter]
postNotificationName:@"closePopover"
object:self];
没有任何反应...弹出窗口继续存在。
为什么?
在创建通知观察器时,您必须将 self
替换为 nil
(对于 object
参数),因为发布通知的不是 self
:
[[NSNotificationCenter defaultCenter] addObserverForName:@"closePopover" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
[self dismissViewControllerAnimated:YES completion:nil];
}];
我在 SO 上看到很多关于此的问题,但他们的回答对我没有任何帮助。
我正在使用故事板展示弹出窗口。过了一会儿,我想以编程方式关闭该弹出窗口。
我尝试了很多东西,但最后一次尝试涉及为弹出框内的视图控制器创建一个 class。 class 是这样的:
- (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];
}];
}
然后,从主代码我 post 一个像
这样的通知 [[NSNotificationCenter defaultCenter]
postNotificationName:@"closePopover"
object:self];
没有任何反应...弹出窗口继续存在。
为什么?
在创建通知观察器时,您必须将 self
替换为 nil
(对于 object
参数),因为发布通知的不是 self
:
[[NSNotificationCenter defaultCenter] addObserverForName:@"closePopover" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
[self dismissViewControllerAnimated:YES completion:nil];
}];