最近工作中,出现一种业务场景:
客户端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 移出,界面显示就正常了