我如何显示来自任何 NSObject 子类的 UIAlertController?

How do i display UIAlertController from any NSObject subclass?

我有一个正在管理的遗留代码库,它需要显示来自各个地方的警报消息。这是一种糟糕的做法,需要重构,但这不会很快发生。使用 iOS 9,我需要能够触发和忘记警报视图,并为我管理视图显示和排队。

正如其他人所建议的那样,这通常是不好的做法并且违反了 MVC 原则。但是,如果您正在管理遗留代码库并且重构所有内容根本不是一种选择,我制作了这个 class 让您可以像对待旧的 UIAlertView 一样对待 UIAlertController,它管理显示来自任何 class 的提醒,以及队列的提醒......

https://github.com/sammio2/SMHAlertController

为了显示,UIAlertController,我们需要 UIViewController 的对象,所以你可以使用下面的方法来做到这一点。

 UIWindow *keyWindow = [[UIApplication sharedApplication]keyWindow];
 UIViewController *mainController = [keyWindow rootViewController];
 [mainController presentViewController:alert animated:YES completion:nil];

谢谢

在 NSObject 中显示 UIAlertController class 使用下面的代码。

        UIAlertController * popup =   [UIAlertController
                                  alertControllerWithTitle:nil
                                  message:nil
                                  preferredStyle:UIAlertControllerStyleActionSheet];

        UIAlertAction* cancel = [UIAlertAction
                                 actionWithTitle:@"Cancel"
                                 style:UIAlertActionStyleCancel
                                 handler:^(UIAlertAction * action) {
                                     [popup dismissViewControllerAnimated:YES completion:nil];
                                 }];
        [popup addAction:cancel];

        UIViewController *rootViewController = [[Helper shareInstance] topViewController];
        [rootViewController presentViewController:popup animated:YES completion:nil];

// 在您的全局助手中放入以下方法 Class。

    - (UIViewController *)topViewController {
      return [self topViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
    }

    - (UIViewController *)topViewController:(UIViewController *)rootViewController {
        if (rootViewController.presentedViewController == nil) {
            return rootViewController;
        }

        if ([rootViewController.presentedViewController isMemberOfClass:[UINavigationController class]]) {
            UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController;
            UIViewController *lastViewController = [[navigationController viewControllers] lastObject];
            return [self topViewController:lastViewController];
        }

        UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController;
        return [self topViewController:presentedViewController];
    }