我如何显示来自任何 NSObject 子类的 UIAlertController?
How do i display UIAlertController from any NSObject subclass?
我有一个正在管理的遗留代码库,它需要显示来自各个地方的警报消息。这是一种糟糕的做法,需要重构,但这不会很快发生。使用 iOS 9,我需要能够触发和忘记警报视图,并为我管理视图显示和排队。
正如其他人所建议的那样,这通常是不好的做法并且违反了 MVC 原则。但是,如果您正在管理遗留代码库并且重构所有内容根本不是一种选择,我制作了这个 class 让您可以像对待旧的 UIAlertView
一样对待 UIAlertController
,它管理显示来自任何 class 的提醒,以及队列的提醒......
为了显示,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];
}
我有一个正在管理的遗留代码库,它需要显示来自各个地方的警报消息。这是一种糟糕的做法,需要重构,但这不会很快发生。使用 iOS 9,我需要能够触发和忘记警报视图,并为我管理视图显示和排队。
正如其他人所建议的那样,这通常是不好的做法并且违反了 MVC 原则。但是,如果您正在管理遗留代码库并且重构所有内容根本不是一种选择,我制作了这个 class 让您可以像对待旧的 UIAlertView
一样对待 UIAlertController
,它管理显示来自任何 class 的提醒,以及队列的提醒......
为了显示,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];
}