1

我试图在当前当前 UIViewController 之上呈现一个新的 UIViewController。这是创建所需效果的代码行:

LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
UIViewController *rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController];

[rootController presentViewController:loginViewController animated:YES completion:nil];

问题是我添加了一个 UIActionSheet,它要求用户确认所需的操作(即注销)。当用户确认操作时,我运行上面提到的代码和平,但 UIActionSheet 仍然是 keyWindow。因此 LoginViewController 没有出现在顶部(当我尝试调试时 rootController 为空)。

我的问题是:我能否以某种方式找到 UIActionSheet 下的 UIWindow 并从那里获得根控制器,或者我可以在用户选择注销操作时以编程方式关闭 UIActionSheet,然后才执行上述代码?

先感谢您!

4

3 回答 3

2

刚刚遇到同样的问题并找到了解决方法。您可以浏览所有应用程序窗口并获得一个具有 windowLevel equals 的窗口UIWindowLevelNormal

当然,只有当您的应用程序中有一个普通窗口时,这才能正常工作。如果您有多个,您应该有自己的规则来检测正确的窗口。

希望这会有所帮助。

于 2013-11-09T00:45:16.587 回答
0

您可以使用以下代码到达窗口:

UIWindow* window = [[UIApplication sharedApplication] keyWindow];
于 2013-11-08T15:51:14.690 回答
0

埃里克在这里的回答是最可靠的解决方案。请注意,当存在操作表时,您不能添加/动画视图。如果不参考实际的操作表来将您的控制器设置为委托并知道该表何时被解除,您不知道操作表何时被解除。这只是一个仅供参考,因为这些是我目前遇到的问题。

于 2014-04-11T17:10:31.453 回答