获取应用程序的主窗口

Jon*_*an. 31 objective-c uiwindow uiapplication ios

UIApplication有一个方法keyWindow,但是如果显示警报视图,则返回警报视图的窗口而不是应用程序的主窗口.

如何获得应用程序的主窗口?

Esp*_*sso 53

UIApplicationDelegate通常的"主窗口"的参考:

[[[UIApplication sharedApplication] delegate] window];
Run Code Online (Sandbox Code Playgroud)

此外,UIApplication还有一系列窗户[[UIApplication sharedApplication] windows].

请参阅UIApplication类参考.

  • 对代表来说这是可选的不是吗?我希望有更"具体"的方式 (3认同)

rma*_*ddy 10

我不是100%肯定这适用于所有情况但这应该工作:

UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];
Run Code Online (Sandbox Code Playgroud)

窗口按顺序排序,因此主窗口应始终位于索引0处.

  • 如果没有窗口,你应该调用`[[[UIApplication sharedApplication] windows] firstObject]`来避免出界异常(不喜欢那里永远不会有任何窗口,但是避免那些是一个好习惯 (11认同)

fpg*_*503 5

Swift 3.0版本的rmaddy的答案

let window = UIApplication.shared.windows.first
Run Code Online (Sandbox Code Playgroud)

我还应该补充一点,因为iOS 8.0 UIAlertController已被替换UIAlertView并成为视图控制器,所以您可能不再面临创建新窗口的问题。