// // Copyright © 2018 Jimmy. All rights reserved. // #import "LCAlertController.h" @implementation LCAlertController + (LCAlertController *)showWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitle:(NSString *)otherButtonTitle handler:(LCAlertControllerHandler)handler { LCAlertController *alertController = [LCAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; if (cancelButtonTitle != nil) { UIAlertAction *cancelAction = [UIAlertAction actionWithTitle: cancelButtonTitle style: UIAlertActionStyleCancel handler: ^(UIAlertAction * _Nonnull action) { if (handler) { handler(0); } }]; [alertController addAction: cancelAction]; } if (otherButtonTitle != nil) { UIAlertAction *otherAction = [UIAlertAction actionWithTitle: otherButtonTitle style: UIAlertActionStyleDefault handler: ^(UIAlertAction * _Nonnull action) { if (handler) { handler(1); } }]; [alertController addAction: otherAction]; } UIViewController *topVc = [self topPresentOrRootController]; [topVc presentViewController:alertController animated:true completion:nil]; return alertController; } + (LCAlertController *)showWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray<NSString *> *)otherButtonTitles handler:(LCAlertControllerHandler)handler { LCAlertController *alertController = [LCAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; if (cancelButtonTitle != nil) { UIAlertAction *cancelAction = [UIAlertAction actionWithTitle: cancelButtonTitle style: UIAlertActionStyleCancel handler: ^(UIAlertAction * _Nonnull action) { if (handler) { handler(0); } }]; [alertController addAction: cancelAction]; } if (otherButtonTitles.count > 0) { for (int i = 0; i<otherButtonTitles.count; i++) { NSString *otherButtonTitle = otherButtonTitles[i]; UIAlertAction *otherAction = [UIAlertAction actionWithTitle: otherButtonTitle style: UIAlertActionStyleDefault handler: ^(UIAlertAction * _Nonnull action) { if (handler) { handler(i+1); } }]; [alertController addAction: otherAction]; } } UIViewController *topVc = [self topPresentOrRootController]; [topVc presentViewController:alertController animated:true completion:nil]; return alertController; } + (LCAlertController *)showInViewController:(UIViewController *)vc title:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitle:(NSString *)otherButtonTitle handler:(LCAlertControllerHandler)handler { LCAlertController *alertController = [LCAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; if (cancelButtonTitle != nil) { UIAlertAction *cancelAction = [UIAlertAction actionWithTitle: cancelButtonTitle style: UIAlertActionStyleCancel handler: ^(UIAlertAction * _Nonnull action) { if (handler) { handler(0); } }]; [alertController addAction: cancelAction]; } if (otherButtonTitle != nil) { UIAlertAction *otherAction = [UIAlertAction actionWithTitle: otherButtonTitle style: UIAlertActionStyleDefault handler: ^(UIAlertAction * _Nonnull action) { if (handler) { handler(1); } }]; [alertController addAction: otherAction]; } [vc presentViewController:alertController animated:true completion:nil]; return alertController; } + (LCAlertController *)showInViewController:(UIViewController *)vc title:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray<NSString *> *)otherButtonTitles handler:(LCAlertControllerHandler)handler { LCAlertController *alertController = [LCAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; if (cancelButtonTitle != nil) { UIAlertAction *cancelAction = [UIAlertAction actionWithTitle: cancelButtonTitle style: UIAlertActionStyleCancel handler: ^(UIAlertAction * _Nonnull action) { if (handler) { handler(0); } }]; [alertController addAction: cancelAction]; } if (otherButtonTitles.count > 0) { for (int i = 0; i<otherButtonTitles.count; i++) { NSString *otherButtonTitle = otherButtonTitles[i]; UIAlertAction *otherAction = [UIAlertAction actionWithTitle: otherButtonTitle style: UIAlertActionStyleDefault handler: ^(UIAlertAction * _Nonnull action) { if (handler) { handler(i+1); } }]; [alertController addAction: otherAction]; } } [vc presentViewController:alertController animated:true completion:nil]; return alertController; } + (void)dismiss { [self dismissAnimated:false]; } + (void)dismissAnimated:(BOOL)isAnimated { UIViewController *presentedVC = [self topPresentOrRootController]; if ([presentedVC isKindOfClass:[UIAlertController class]]) { [presentedVC dismissViewControllerAnimated:isAnimated completion:nil]; } //ã€*】ä»éœ€è¦å…¼å®¹æ—§çš„场景 UIViewController *rootVC = [[UIApplication sharedApplication] delegate].window.rootViewController; if (rootVC != presentedVC && [rootVC isKindOfClass:[UIAlertController class]]) { [rootVC dismissViewControllerAnimated:isAnimated completion:nil]; } } + (BOOL)isDisplayed { UIViewController *rootVC = [UIApplication sharedApplication].keyWindow.rootViewController; UIViewController *presentedVC = [rootVC presentedViewController]; return [presentedVC isKindOfClass:[UIAlertController class]]; } - (BOOL)shouldAutorotate { return false; } #pragma mark - Find Top Present Controller or RootVC + (UIViewController *)topPresentOrRootController { UIViewController *rootVC = [[UIApplication sharedApplication] delegate].window.rootViewController; UIViewController *presentVc = rootVC.presentedViewController; UIViewController *targetVc; while (presentVc && ![presentVc isKindOfClass:[UIAlertController class]]) { targetVc = presentVc; presentVc = presentVc.presentedViewController; } if (targetVc) { return targetVc; } return rootVC; } - (void)dealloc { NSLog(@" 💔💔💔 %@ dealloced 💔💔💔", NSStringFromClass(self.class)); } @end