无法从另一个类中关闭 UIPopover

Posted

技术标签:

【中文标题】无法从另一个类中关闭 UIPopover【英文标题】:Unable to dismiss a UIPopover from another class 【发布时间】:2013-06-29 15:41:34 【问题描述】:

我有一个 iPad 应用,使用 XCode 4.6.3、ios 6.2、ARC 和 Storyboards 创建。

我在 SubViewData.m 中以编程方式创建了一个 UIPopover。

@property (strong, nonatomic) UIPopoverController *popover;

    //  make rectangle to attach popover
    CGRect rectangle = CGRectMake( touchPoint.x, touchPoint.y, 110, 1);  //  0 height puts arrow on exact touch point

    //  get addressability to storyboard ViewController
    UIViewController *popoverMainView = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"menuView"];

    popover = [[UIPopoverController alloc] initWithContentViewController:popoverMainView];
                            [popover presentPopoverFromRect:rectangle inView:self
                            permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

当点击弹出窗口中的 UIButton 时,我在另一个类 (QuickAppointment.m) 中设置通知。我收到通知并从 CalendarViewController.m 发出此代码:

SubViewData *svd = [[SubViewData alloc] init];
[svd.popover dismissPopoverAnimated:YES];

什么都没有发生!我不明白为什么不......所以,我做错了什么?

【问题讨论】:

【参考方案1】:

看看你正在写的代码:

SubViewData *svd = [[SubViewData alloc] init];

这会创建一个全新且不同的 SubViewData 实例,而不是显示弹出框的实例。

【讨论】:

我尝试将关闭代码放在 SubViewData.m 中,但也没有任何反应......要关闭的代码应该在哪里?以及如何在不创建新实例的情况下获取 SubViewData 实例? (我认为我的做法是正确的,但显然不是).. 由于我不知道您如何或添加什么到 SubViewData.m,所以我无能为力。至于获取正确的实例 - 你这样做的方式与获取任何实例的方式相同;通过传递对将调用它的方法的对象的引用。 我试过了(通过引用)......这就是我使用的:[SubViewData.popover dismissPopoverAnimated:YES];它不知道 popover 是什么...你能给我一个文档,我可以在其中阅读整个实例化的东西吗?我会非常非常感谢它。我正在为此苦苦挣扎…… 你确定这没有给你编译器警告吗?看起来您要的是类而不是对象的属性。您的 SubViewData 对象是否有一个名为 popover 的属性?你把它设置为弹出框控制器了吗? 是的... SubViewData 有一个名为 popover 的对象(参见上面的原始问题),它被设置为 popover 控制器(相同的代码)。

以上是关于无法从另一个类中关闭 UIPopover的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个活动或底部工作表对话框/片段中关闭一个活动

Kivy:从另一个弹出窗口中关闭一个弹出窗口

如何在线程中关闭 QWebSocket?

Swift:在 AFNetworking 调用中关闭的未包装选项

如何在 SwiftMailer 中关闭 SMTP 连接

如何从父关闭按钮单击事件打开的子对话框中关闭父对话框?