在所有其他视图上添加UIView,包括StatusBar

我想创build一个视图(UIControl),它阻止所有input,并显示UIActivityIndi​​catorView同时对用户进行身份validation。

UIActionSheet和U​​IAlertView都pipe理添加一个黑色的半透明视图顶部的所有其他视图阻止input,我想要做类似的。

我已经尝试将我的视图添加到[[UIApplication sharedApplication]窗口]数组中的顶层UIWindow,并且,如果可见,它会将其放在UIKeyboard上方,但不会将其放在StatusBar上(这是有道理的)。

我的下一个尝试是扩展UIAlertView,删除所有的子视图,并设置其layer.contents =零,然后添加ActivityIndi​​cator作为子视图。 这很好,但我似乎无法杀死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]; 

我即将做同样的事情,发现以下

http://www.dejal.com/developer/dsactivityview

看起来它有你想要的一切