如何在不操作界面的情况下关闭UIPopoverController

来源:互联网 发布:c语言是什么语言 编辑:程序博客网 时间:2024/04/30 18:51

最近工作中,出现一种业务场景:

客户端A 可以 通过Socket控制客户端B

当A未控制B时,B通过点击一个按钮打开了一个UIPopoverController,在PopoverController没有关闭的情况下(需要点击屏幕之后才能关闭),

A开发控制B,并使得B打开一个界面 bView,那么在bView打开后,会发现PopoverController没有被覆盖在bView的下面,而是依然显示在最外层。 

在检查之后,发现PopoverController是由一个叫  UIDimmingView的类承载的(私有API中的类)。

这个时候,我们需要手动删除UIDimmingView


UIWindow *window = [[UIApplication sharedApplication] keyWindow];    for (UIView *baseView in window.subviews) {        if ([baseView isKindOfClass:NSClassFromString(@"UIDimmingView")]) {            for (UIView *popoverView in baseView.subviews) {                if ([popoverView isKindOfClass:NSClassFromString(@"_UIPopoverView")]) {                    [baseView removeFromSuperview];                    break;                }            }        }    }


这样在B收到A发来的控制消息时,先对把界面上的UIDimmingView移出,界面显示就正常了

原创粉丝点击