我在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
解散时,我无法再与屏幕上的任何内容互动了。任何想法?感谢。
答案 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下,未接收到触摸。