UIAlertControllerを自動で消す
ボタンを押さずに画面に表示されているAlertを消す方法
例えば何かの処理が終わった後や、強制的に画面遷移するときに使う
やりかた
UIViewController *presentedViewController = [UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController; if([presentedViewController isKindOfClass:NSClassFromString(@"UIAlertController")]){ [presentedViewController dismissViewControllerAnimated:NO completion:nil]; }
presentedViewControllerで最前面のUIViewControllerを取得します。
このUIViewControllerがUIAlertControllerの場合は閉じます。
iOS13の場合
Target iOS13の場合はkeyWindowが非推奨のため使えません。
こちらを参考に以下のように取得します。
How to resolve: 'keyWindow' was deprecated in iOS 13.0
+(UIWindow*)keyWindow { UIWindow *foundWindow = nil; NSArray *windows = [[UIApplication sharedApplication]windows]; for (UIWindow *window in windows) { if (window.isKeyWindow) { foundWindow = window; break; } } return foundWindow; }