Ios 获取UIActionSheet下的UIWindow
我试图在当前UIViewController的基础上呈现一个新的UIViewController。 以下是创建所需效果的代码行:Ios 获取UIActionSheet下的UIWindow,ios,uiactionsheet,uiwindow,Ios,Uiactionsheet,Uiwindow,我试图在当前UIViewController的基础上呈现一个新的UIViewController。 以下是创建所需效果的代码行: LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; UIViewController *rootController = [[[UIApplication sharedApp
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
UIViewController *rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
[rootController presentViewController:loginViewController animated:YES completion:nil];
问题是我添加了一个UIActionSheet,它要求用户确认所需的操作(即注销)。当用户确认操作时,我运行上面提到的代码和平,但UIActionSheet仍然是关键窗口。因此,LoginViewController不在顶部(当我尝试调试时,rootController为null)
我的问题是:我是否可以找到UIActionSheet下的UIWindow并从中获得根控制器,或者当用户选择注销操作并仅在执行上述代码时,我是否可以以编程方式关闭UIActionSheet
提前谢谢你 您可以使用以下代码访问窗口:
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
只是遇到了同样的问题,并找到了解决办法。您只需浏览所有应用程序窗口,就可以得到一个windowLevel等于
UIWindowLevelNormal
的窗口
当然,只有当你的应用程序中有一个普通窗口时,这项功能才能正常工作。如果有多个窗口,您应该有自己的规则来检测正确的窗口
希望这会有所帮助。埃里克的答案是最可靠的解决方案。请注意,当存在“动作表”时,不能添加/设置视图动画。如果不参考实际行动表,将您的控制员设置为代表,并且不知道何时解散该表,您就不知道何时解散该行动表。这只是供参考,因为这些都是我目前遇到的问题。目前,我在展示UIActionSheet之前将rootController保存为变量,但我认为应该有更好的方法。你的应用程序代理难道没有
窗口
属性吗?这将是应用程序的主窗口。您阅读了问题吗?OP表示keyWindow
正在提供操作表窗口。这就是问题的关键所在。顺便说一句,[[UIApplication sharedApplication]keyWindow]
在iOS<7中运行良好。浏览窗口并找到具有UIWindowLevelNormal
的窗口,非常感谢!)