在所有其他视图上添加UIView,包括StatusBar
我想创build一个视图(UIControl),它阻止所有input,并显示UIActivityIndicatorView同时对用户进行身份validation。
UIActionSheet和UIAlertView都pipe理添加一个黑色的半透明视图顶部的所有其他视图阻止input,我想要做类似的。
我已经尝试将我的视图添加到[[UIApplication sharedApplication]窗口]数组中的顶层UIWindow,并且,如果可见,它会将其放在UIKeyboard上方,但不会将其放在StatusBar上(这是有道理的)。
我的下一个尝试是扩展UIAlertView,删除所有的子视图,并设置其layer.contents =零,然后添加ActivityIndicator作为子视图。 这很好,但我似乎无法杀死UIAlertView的默认有弹性转换时,你把它称为“显示”。
有没有人有最好的方式来解决这个问题,让我完全控制的任何指针?
呵呵,我知道阻塞input并不是很好,但是我确实确保这个input很短时间,而且它的好处是让用户明白他们必须完成的动作正在处理中。
我已经做了一些更多的API的挖掘,并相信我已经完成了。
为了在整个屏幕上显示一个视图,你需要创build自己的UIWindow并将其windowLevel属性设置为UIWindowLevelStatusBar。 然后,您可以将您的自定义子视图添加到此窗口。
请注意,苹果不鼓励,但他们也不禁止创build多个窗口。
UIWindow *statusWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; statusWindow.windowLevel = UIWindowLevelStatusBar; statusWindow.hidden = NO; statusWindow.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.7]; [statusWindow makeKeyAndVisible];
当你想从屏幕上移除窗口,就好像你从内存中释放窗口。
[statusWindow release];
这并不完全安全,但我没有得到任何错误,它似乎把它从UIApplication的窗口arrays中删除。 请让我知道,如果这是错的。
更新:
我遇到的另一个问题是UIStatusBar没有采取触摸事件滚动活动的UIScrollView到顶部后,我已经显示并删除这个覆盖窗口。 解决scheme是一旦覆盖层被释放,将主窗口设置回关键窗口。
[primaryWindow makeKeyWindow];
我需要在我的主窗口中显示所有其他视图的视图。 最初,我想在我的关键窗口之上展示另一个窗口。 因为,苹果劝阻使用多个窗口,我决定反对它。
下面的代码为我做了这个伎俩:
我将我的视图添加到了我的关键窗口的子视图中,该视图自动将视图显示在所有其他视图之上。 在我的情况下,这个代码是在应用程序的委托
[self.window addSubview:topViewController.view]
当我完成了视图,下面的代码将其从窗口中删除。
[topViewController.view removeFromSuperview];