从AppDelegate呈现UIAlertController后无法点击任何内容

时间:2016-10-25 19:07:12

标签: ios objective-c uialertcontroller

我在AppDelegate的额外窗口的根视图控制器中显示UIAlerController

//AppDelegate.h
@property (strong, nonatomic) UIWindow *alertWindow;

//SomeViewController.m
 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
 UIAlertAction* action = [UIAlertAction actionWithTitle:@"action" style:UIAlertActionStyleDefault
                                                            handler:^(UIAlertAction* a){[alert dismissViewControllerAnimated:true completion:nil];});             
 [alert addAction:action];

 appDelegate.alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
 appDelegate.alertWindow.rootViewController = [[UIViewController alloc] init];
 appDelegate.alertWindow.windowLevel = UIWindowLevelAlert + 1;
 [appDelegate.alertWindow makeKeyAndVisible];
 [appDelegate.alertWindow.rootViewController presentViewController:alert animated:true completion:nil];

UIAlertController解散时,我无法再与屏幕上的任何内容互动了。任何想法?感谢。

3 个答案:

答案 0 :(得分:0)

所以我通过将其添加到按钮的处理程序中来修复此问题:

[appDelegate.window makeKeyAndVisible];
appDelegate.window.windowLevel = UIWindowLevelAlert + 1;

不确定这是否是正确的解决方案,但它现在已经完成了工作......如果有人能够对此有所了解,我将不胜感激。

答案 1 :(得分:0)

请勿尝试关闭警报控制器。当调用警报动作的处理程序时,它将被解除。

仅在处理程序中隐藏或销毁alertWindow。

这里试试这个:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"Action" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    appDelegate.alertWindow.hidden = YES;
    appDelegate.alertWindow = nil;
}];


                         [alert addAction:alertAction];
                         appDelegate.alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
                         appDelegate.alertWindow.rootViewController = [[UIViewController alloc] init];
                         appDelegate.alertWindow.windowLevel = UIWindowLevelAlert + 1;
[appDelegate.alertWindow makeKeyAndVisible];
[appDelegate.alertWindow.rootViewController presentViewController:alert animated:true completion:nil];

答案 2 :(得分:-1)

删除该行:

appDelegate.alertWindow.windowLevel = UIWindowLevelAlert + 1;

您的UIAlertController位于alertWindow下,未接收到触摸。