我正在尝试在当前当前的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为null)。
我的问题是:我可以以某种方式找到UIActionSheet下的UIWindow并从那里获得根控制器,或者当用户选择注销操作并且只执行上述代码时,我可以以编程方式解除UIActionSheet吗?
提前谢谢!
答案 0 :(得分:2)
刚刚遇到同样的问题并找到了解决方法。您可以浏览所有应用程序窗口并获取windowLevel等于UIWindowLevelNormal
的窗口。
当然,只有在应用中有一个普通窗口时,这才能正常工作。如果你有多个,你应该有自己的规则如何检测正确的窗口。
希望这会有所帮助。
答案 1 :(得分:0)
您可以使用以下代码访问窗口:
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
答案 2 :(得分:0)
Eric的回答here是最可靠的解决方案。请注意,在操作表存在时,您无法添加/动画视图。并且没有参考实际的操作表来将您的控制器设置为代表并且知道何时解雇工作表,您不知道什么时候工作表被解雇。这只是一个FYI,因为这些是我目前遇到的问题。