//
|
// Copyright © 2018 Jimmy. All rights reserved.
|
//
|
|
#import <LCBaseModule/DHAlertController.h>
|
#import <LCBaseModule/NSString+Dahua.h>
|
#import <LCBaseModule/UIColor+LeChange.h>
|
#import <LCBaseModule/UIFont+Dahua.h>
|
#import <Masonry/Masonry.h>
|
#import <LCBaseModule/LCBaseModule-Swift.h>
|
|
@interface DHAlertController ()
|
|
@property (nonatomic, copy) DHAlertControllerHandler handler;
|
|
@end
|
|
@implementation DHAlertController
|
|
+ (DHAlertController *)showWithTitle:(NSString *)title
|
message:(NSString *)message
|
cancelButtonTitle:(NSString *)cancelButtonTitle
|
otherButtonTitle:(NSString *)otherButtonTitle
|
handler:(DHAlertControllerHandler)handler {
|
DHAlertController *alertController = [DHAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert];
|
alertController.handler = handler;
|
alertController.view.backgroundColor = [UIColor whiteColor];
|
if (alertController.view.subviews.count > 0) {
|
for (UIView *subview in alertController.view.subviews) {
|
subview.alpha = 0;
|
}
|
}
|
alertController.view.layer.cornerRadius = 7.5;
|
|
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
cancelButton.backgroundColor = UIColor.dhcolor_c3;
|
[cancelButton setTitle:cancelButtonTitle forState:UIControlStateNormal];
|
[cancelButton setTitleColor:UIColor.dhcolor_c43 forState:UIControlStateNormal];
|
[alertController.view addSubview:cancelButton];
|
cancelButton.layer.cornerRadius = 22.5;
|
[cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(alertController.view.mas_centerX).offset(-7.5);
|
make.width.mas_equalTo((DH_SCREEN_SIZE_WIDTH - 140.0) / 2.0);
|
}];
|
cancelButton.titleLabel.font = UIFont.dhFont_f3;
|
cancelButton.tag = 0;
|
[cancelButton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
UIButton *otherBUtton = [UIButton buttonWithType:UIButtonTypeCustom];
|
otherBUtton.backgroundColor = UIColor.dhcolor_c1;
|
[otherBUtton setTitle:otherButtonTitle forState:UIControlStateNormal];
|
[otherBUtton setTitleColor:UIColor.dhcolor_c43 forState:UIControlStateNormal];
|
otherBUtton.layer.cornerRadius = 22.5;
|
otherBUtton.tag = 1;
|
otherBUtton.titleLabel.font = UIFont.dhFont_f3;
|
[alertController.view addSubview:otherBUtton];
|
[otherBUtton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
[otherBUtton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(alertController.view.mas_centerX).offset(7.5);
|
make.right.mas_equalTo(-25);
|
}];
|
|
UILabel *titleLabel = [[UILabel alloc] init];
|
titleLabel.text = title;
|
titleLabel.textColor = UIColor.dhcolor_c2;
|
titleLabel.font = [UIFont dhFont_t1Bold];
|
[alertController.view addSubview:titleLabel];
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(35);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
}];
|
|
UILabel *messageLabel = [[UILabel alloc] init];
|
messageLabel.text = message;
|
messageLabel.textColor = UIColor.dhcolor_c2;
|
messageLabel.font = [UIFont dhFont_t4];
|
messageLabel.numberOfLines = 0;
|
[alertController.view addSubview:messageLabel];
|
[messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(titleLabel.mas_bottom).offset(15);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
make.bottom.mas_equalTo(cancelButton.mas_top).offset(-15);
|
make.height.mas_greaterThanOrEqualTo(30);
|
}];
|
|
UIViewController *topVc = [self topPresentOrRootController];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = topVc.view;
|
alertController.popoverPresentationController.sourceRect = topVc.view.frame;
|
}
|
|
[topVc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
+ (DHAlertController *)showWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitle:(NSString *)otherButtonTitle tipsButtonTitle:(NSString *)tipsButtonTitle tipsButtonNormalImage:(NSString *)tipsButtonNormalImage tipsButtonSelectedImage:(NSString *)tipsButtonSelectedImage handler:(DHAlertControllerHandler)handler
|
{
|
DHAlertController *alertController = [DHAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert];
|
alertController.handler = handler;
|
alertController.view.backgroundColor = [UIColor whiteColor];
|
if (alertController.view.subviews.count > 0) {
|
for (UIView *subview in alertController.view.subviews) {
|
subview.alpha = 0;
|
}
|
}
|
alertController.view.layer.cornerRadius = 7.5;
|
|
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
cancelButton.backgroundColor = UIColor.dhcolor_c3;
|
[cancelButton setTitle:cancelButtonTitle forState:UIControlStateNormal];
|
[cancelButton setTitleColor:UIColor.dhcolor_c43 forState:UIControlStateNormal];
|
[alertController.view addSubview:cancelButton];
|
cancelButton.layer.cornerRadius = 22.5;
|
[cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(alertController.view.mas_centerX).offset(-7.5);
|
make.width.mas_equalTo((DH_SCREEN_SIZE_WIDTH - 140.0) / 2.0);
|
}];
|
cancelButton.titleLabel.font = UIFont.dhFont_f3;
|
cancelButton.tag = 0;
|
[cancelButton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
UIButton *otherBUtton = [UIButton buttonWithType:UIButtonTypeCustom];
|
otherBUtton.backgroundColor = UIColor.dhcolor_c1;
|
[otherBUtton setTitle:otherButtonTitle forState:UIControlStateNormal];
|
[otherBUtton setTitleColor:UIColor.dhcolor_c43 forState:UIControlStateNormal];
|
otherBUtton.layer.cornerRadius = 22.5;
|
otherBUtton.tag = 1;
|
otherBUtton.titleLabel.font = UIFont.dhFont_f3;
|
[alertController.view addSubview:otherBUtton];
|
[otherBUtton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
[otherBUtton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(alertController.view.mas_centerX).offset(7.5);
|
make.right.mas_equalTo(-25);
|
}];
|
|
UILabel *titleLabel = [[UILabel alloc] init];
|
titleLabel.text = title;
|
titleLabel.textColor = UIColor.dhcolor_c2;
|
titleLabel.font = [UIFont dhFont_t1Bold];
|
[alertController.view addSubview:titleLabel];
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(35);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
}];
|
|
UILabel *messageLabel = [[UILabel alloc] init];
|
messageLabel.text = message;
|
messageLabel.textColor = UIColor.dhcolor_c2;
|
messageLabel.font = [UIFont dhFont_t4];
|
messageLabel.numberOfLines = 0;
|
[alertController.view addSubview:messageLabel];
|
[messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(titleLabel.mas_bottom).offset(15);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
make.height.mas_greaterThanOrEqualTo(30);
|
}];
|
|
UIButton *tipsButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
tipsButton.tag = 100;
|
[tipsButton setTitle:tipsButtonTitle forState:UIControlStateNormal];
|
[tipsButton setTitleColor:UIColor.dhcolor_c5 forState:UIControlStateNormal];
|
tipsButton.titleLabel.font = [UIFont systemFontOfSize:13];
|
[tipsButton setImage:[UIImage imageNamed:tipsButtonNormalImage] forState:UIControlStateNormal];
|
[tipsButton setImage:[UIImage imageNamed:tipsButtonSelectedImage] forState:UIControlStateSelected];
|
tipsButton.imageEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
|
[tipsButton addTarget:alertController action:@selector(tipsButtonClick:) forControlEvents:UIControlEventTouchUpInside];
|
[alertController.view addSubview:tipsButton];
|
[tipsButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(messageLabel.mas_bottom).offset(12);
|
make.left.mas_equalTo(25);
|
make.width.mas_equalTo(80);
|
make.height.mas_equalTo(20);
|
make.bottom.mas_equalTo(cancelButton.mas_top).offset(-12);
|
}];
|
|
UIViewController *topVc = [self topPresentOrRootController];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = topVc.view;
|
alertController.popoverPresentationController.sourceRect = topVc.view.frame;
|
}
|
|
[topVc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
|
+ (DHAlertController *)showSheetWithCancelButtonTitle:(NSString *)cancelButtonTitle
|
otherButtonTitles:(NSArray <NSString *> *)otherButtonTitles
|
handler:(DHAlertControllerHandler)handler {
|
DHAlertController *alertController = [DHAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
|
alertController.handler = handler;
|
alertController.view.backgroundColor = [UIColor whiteColor];
|
if (alertController.view.subviews.count > 0) {
|
for (UIView *subview in alertController.view.subviews) {
|
subview.alpha = 0;
|
}
|
}
|
alertController.view.backgroundColor = UIColor.dhcolor_c43;
|
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
cancelButton.backgroundColor = UIColor.clearColor;
|
[cancelButton setTitle:cancelButtonTitle forState:UIControlStateNormal];
|
[cancelButton setTitleColor:UIColor.dhcolor_c2 forState:UIControlStateNormal];
|
[alertController.view addSubview:cancelButton];
|
cancelButton.titleLabel.font = UIFont.dhFont_f3;
|
[cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(alertController.view.mas_bottom);
|
make.height.mas_equalTo(57);
|
make.centerX.mas_equalTo(alertController.view.mas_centerX);
|
make.width.mas_equalTo(SCREEN_WIDTH);
|
make.right.left.mas_equalTo(alertController.view);
|
}];
|
cancelButton.tag = 0;
|
[cancelButton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
UIView *lineView = [UIView new];
|
lineView.backgroundColor = UIColor.dhcolor_c8;
|
[alertController.view addSubview: lineView];
|
[lineView mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.left.right.mas_equalTo(alertController.view);
|
make.height.mas_equalTo(1);
|
make.bottom.mas_equalTo(cancelButton.mas_top);
|
}];
|
|
for (int a = 0; a < otherButtonTitles.count; a++) {
|
NSString *otherButtonTitle = otherButtonTitles[a];
|
UIButton *otherBUtton = [UIButton buttonWithType:UIButtonTypeCustom];
|
otherBUtton.backgroundColor = UIColor.clearColor;
|
[otherBUtton setTitle:otherButtonTitle forState:UIControlStateNormal];
|
[otherBUtton setTitleColor:UIColor.dhcolor_c2 forState:UIControlStateNormal];
|
otherBUtton.tag = a + 1;
|
otherBUtton.titleLabel.font = UIFont.dhFont_f3;
|
[alertController.view addSubview:otherBUtton];
|
[otherBUtton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
if (a==(otherButtonTitles.count-1)) {
|
[otherBUtton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(lineView.mas_top).offset(-65*a);
|
make.height.mas_equalTo(65);
|
make.width.mas_equalTo(SCREEN_WIDTH);
|
make.top.mas_equalTo(alertController.view.mas_top);
|
}];
|
}else{
|
[otherBUtton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(lineView.mas_top).offset(-65*a);
|
make.height.mas_equalTo(65);
|
make.width.mas_equalTo(SCREEN_WIDTH);
|
}];
|
}
|
|
}
|
|
[alertController.view layoutIfNeeded];
|
[alertController.view setCornerRadiusWithCorners:(UIRectCornerTopRight | UIRectCornerTopLeft) radius:7.5];
|
|
UIViewController *topVc = [self topPresentOrRootController];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = topVc.view;
|
alertController.popoverPresentationController.sourceRect = topVc.view.frame;
|
}
|
|
[topVc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
+ (DHAlertController *)showSheetWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitle:(NSString *)otherButtonTitle handler:(DHAlertControllerHandler)handler;
|
{
|
DHAlertController *alertController = [DHAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
|
alertController.handler = handler;
|
alertController.view.backgroundColor = [UIColor whiteColor];
|
if (alertController.view.subviews.count > 0) {
|
for (UIView *subview in alertController.view.subviews) {
|
subview.alpha = 0;
|
}
|
}
|
alertController.view.backgroundColor = UIColor.dhcolor_c43;
|
|
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
cancelButton.backgroundColor = UIColor.clearColor;
|
[cancelButton setTitle:cancelButtonTitle forState:UIControlStateNormal];
|
[cancelButton setTitleColor:UIColor.dhcolor_c2 forState:UIControlStateNormal];
|
[alertController.view addSubview:cancelButton];
|
cancelButton.titleLabel.font = UIFont.dhFont_f3;
|
[cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(alertController.view.mas_bottom); //.offset(-8);
|
make.height.mas_equalTo(57);
|
make.width.mas_equalTo(SCREEN_WIDTH);
|
make.right.left.mas_equalTo(alertController.view);
|
}];
|
cancelButton.tag = 0;
|
[cancelButton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
UIButton *otherBUtton = [UIButton buttonWithType:UIButtonTypeCustom];
|
otherBUtton.backgroundColor = UIColor.clearColor;
|
[otherBUtton setTitle:otherButtonTitle forState:UIControlStateNormal];
|
[otherBUtton setTitleColor:UIColor.dhcolor_c12 forState:UIControlStateNormal];
|
otherBUtton.tag = 1;
|
otherBUtton.titleLabel.font = UIFont.dhFont_f3;
|
[alertController.view addSubview:otherBUtton];
|
[otherBUtton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
[otherBUtton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(cancelButton.mas_top).offset(-5);
|
make.height.mas_equalTo(65);
|
make.width.mas_equalTo(SCREEN_WIDTH);
|
make.left.mas_equalTo(alertController.view);
|
//make.top.equalTo(lineView.mas_bottom);
|
}];
|
|
UIView *lineView = [UIView new];
|
lineView.backgroundColor = UIColor.dhcolor_c8;
|
[alertController.view addSubview: lineView];
|
[lineView mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.left.right.mas_equalTo(alertController.view);
|
make.height.mas_equalTo(1);
|
//make.bottom.mas_equalTo(messageLabel.mas_top);
|
make.top.mas_equalTo(otherBUtton.mas_top);
|
}];
|
|
UILabel *messageLabel = [[UILabel alloc] init];
|
messageLabel.text = message;
|
messageLabel.textColor = UIColor.dhcolor_c5;
|
messageLabel.font = [UIFont systemFontOfSize:13];
|
messageLabel.numberOfLines = 0;
|
messageLabel.textAlignment = NSTextAlignmentCenter;
|
[alertController.view addSubview:messageLabel];
|
[messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
//make.top.mas_equalTo(titleLabel.mas_bottom).offset(15);
|
make.left.mas_equalTo(alertController.view.mas_left).offset(10);
|
make.right.mas_equalTo(alertController.view.mas_right).offset(-10);
|
make.bottom.mas_equalTo(lineView.mas_top).offset(-20);
|
//make.height.mas_greaterThanOrEqualTo(30);
|
}];
|
|
UILabel *titleLabel = [[UILabel alloc] init];
|
titleLabel.text = title;
|
titleLabel.textColor = UIColor.dhcolor_c2;
|
titleLabel.font = [UIFont dhFont_t1Bold];
|
titleLabel.textAlignment = NSTextAlignmentCenter;
|
[alertController.view addSubview:titleLabel];
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(alertController.view.mas_top).offset(20);
|
make.left.mas_equalTo(alertController.view.mas_left).offset(10);
|
make.right.mas_equalTo(alertController.view.mas_right).offset(-10);
|
make.bottom.mas_equalTo(messageLabel.mas_top).offset(-20);
|
make.height.mas_equalTo(20);
|
}];
|
|
[alertController.view layoutIfNeeded];
|
[alertController.view setCornerRadiusWithCorners:(UIRectCornerTopRight | UIRectCornerTopLeft) radius:7.5];
|
|
UIViewController *topVc = [self topPresentOrRootController];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = topVc.view;
|
alertController.popoverPresentationController.sourceRect = topVc.view.frame;
|
}
|
|
[topVc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
- (void)tipsButtonClick:(UIButton *)button
|
{
|
button.selected = !button.isSelected;
|
if (self.handler) {
|
self.handler(button.tag);
|
}
|
}
|
|
- (void)didPressButtonAction:(UIButton *)button {
|
[self dismissViewControllerAnimated:true completion:^{
|
if (self.handler) {
|
self.handler(button.tag);
|
}
|
}];
|
}
|
|
+(DHAlertController *)showWithTitle:(NSString *)title message:(NSString *)message buttonTitle:(NSString *)cancelButtonTitle handler:(DHAlertControllerHandler)handler{
|
DHAlertController *alertController = [DHAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert];
|
alertController.handler = handler;
|
alertController.view.backgroundColor = [UIColor whiteColor];
|
if (alertController.view.subviews.count > 0) {
|
for (UIView *subview in alertController.view.subviews) {
|
subview.alpha = 0;
|
}
|
}
|
alertController.view.layer.cornerRadius = 7.5;
|
|
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
cancelButton.backgroundColor = UIColor.dhcolor_c1;
|
[cancelButton setTitle:cancelButtonTitle forState:UIControlStateNormal];
|
[cancelButton setTitleColor:UIColor.dhcolor_c10 forState:UIControlStateNormal];
|
[alertController.view addSubview:cancelButton];
|
cancelButton.layer.cornerRadius = 16.5;
|
cancelButton.titleLabel.font = UIFont.dhFont_f3;
|
[cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(33);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
}];
|
cancelButton.tag = 0;
|
[cancelButton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
|
UILabel *titleLabel = [[UILabel alloc] init];
|
titleLabel.text = title;
|
titleLabel.textColor = UIColor.dhcolor_c2;
|
titleLabel.font = [UIFont dhFont_t1Bold];
|
[alertController.view addSubview:titleLabel];
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(35);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
}];
|
|
UILabel *messageLabel = [[UILabel alloc] init];
|
messageLabel.text = message;
|
messageLabel.textColor = UIColor.dhcolor_c2;
|
messageLabel.font = [UIFont dhFont_t4];
|
messageLabel.numberOfLines = 0;
|
[alertController.view addSubview:messageLabel];
|
[messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(titleLabel.mas_bottom).offset(15);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
make.bottom.mas_equalTo(cancelButton.mas_top).offset(-15);
|
make.height.mas_greaterThanOrEqualTo(30);
|
}];
|
|
UIViewController *topVc = [self topPresentOrRootController];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = topVc.view;
|
alertController.popoverPresentationController.sourceRect = topVc.view.frame;
|
}
|
|
[topVc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
+ (DHAlertController *)showWithTitle:(NSString *)title
|
message:(NSString *)message
|
cancelButtonTitle:(NSString *)cancelButtonTitle
|
otherButtonTitles:(NSArray<NSString *> *)otherButtonTitles
|
handler:(DHAlertControllerHandler)handler {
|
DHAlertController *alertController = [DHAlertController 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];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = topVc.view;
|
alertController.popoverPresentationController.sourceRect = topVc.view.frame;
|
}
|
|
[topVc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
+ (DHAlertController *)showWithTitle:(NSString *)title
|
customView:(UIView *)customView
|
cancelButtonTitle:(NSString *)cancelButtonTitle
|
otherButtonTitle:(NSString *)otherButtonTitle
|
handler:(DHAlertControllerHandler)handler {
|
DHAlertController *alertController = [DHAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert];
|
alertController.handler = handler;
|
alertController.view.backgroundColor = [UIColor whiteColor];
|
if (alertController.view.subviews.count > 0) {
|
for (UIView *subview in alertController.view.subviews) {
|
subview.alpha = 0;
|
}
|
}
|
alertController.view.layer.cornerRadius = 7.5;
|
|
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
cancelButton.backgroundColor = UIColor.dhcolor_c3;
|
[cancelButton setTitle:cancelButtonTitle forState:UIControlStateNormal];
|
[cancelButton setTitleColor:UIColor.dhcolor_c43 forState:UIControlStateNormal];
|
[alertController.view addSubview:cancelButton];
|
cancelButton.layer.cornerRadius = 22.5;
|
cancelButton.titleLabel.font = UIFont.dhFont_f3;
|
[cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(alertController.view.mas_centerX).offset(-7.5);
|
make.width.mas_equalTo((DH_SCREEN_SIZE_WIDTH - 140.0) / 2.0);
|
}];
|
cancelButton.tag = 0;
|
[cancelButton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
UIButton *otherBUtton = [UIButton buttonWithType:UIButtonTypeCustom];
|
otherBUtton.backgroundColor = UIColor.dhcolor_c1;
|
[otherBUtton setTitle:otherButtonTitle forState:UIControlStateNormal];
|
[otherBUtton setTitleColor:UIColor.dhcolor_c10 forState:UIControlStateNormal];
|
otherBUtton.layer.cornerRadius = 22.5;
|
otherBUtton.tag = 1;
|
otherBUtton.titleLabel.font = UIFont.dhFont_f3;
|
[alertController.view addSubview:otherBUtton];
|
[otherBUtton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
[otherBUtton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(alertController.view.mas_centerX).offset(7.5);
|
make.right.mas_equalTo(-25);
|
}];
|
|
UILabel *titleLabel = [[UILabel alloc] init];
|
titleLabel.text = title;
|
titleLabel.textColor = UIColor.dhcolor_c2;
|
titleLabel.font = [UIFont dhFont_t1Bold];
|
[alertController.view addSubview:titleLabel];
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(35);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
}];
|
|
if (!customView) {
|
customView = [[UIView alloc] init];
|
}
|
|
[alertController.view addSubview:customView];
|
[customView mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(titleLabel.mas_bottom).offset(15.0);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
make.bottom.mas_equalTo(cancelButton.mas_top).offset(-15);
|
}];
|
|
UIViewController *topVc = [self topPresentOrRootController];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = topVc.view;
|
alertController.popoverPresentationController.sourceRect = topVc.view.frame;
|
}
|
|
[topVc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
+ (DHAlertController *)showInViewController:(UIViewController *)vc
|
title:(NSString *)title
|
message:(NSString *)message
|
cancelButtonTitle:(NSString *)cancelButtonTitle
|
otherButtonTitle:(NSString *)otherButtonTitle
|
handler:(DHAlertControllerHandler)handler {
|
DHAlertController *alertController = [DHAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert];
|
alertController.handler = handler;
|
alertController.view.backgroundColor = [UIColor whiteColor];
|
if (alertController.view.subviews.count > 0) {
|
for (UIView *subview in alertController.view.subviews) {
|
subview.alpha = 0;
|
}
|
}
|
alertController.view.layer.cornerRadius = 7.5;
|
|
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
cancelButton.backgroundColor = UIColor.dhcolor_c3;
|
[cancelButton setTitle:cancelButtonTitle forState:UIControlStateNormal];
|
[cancelButton setTitleColor:UIColor.dhcolor_c43 forState:UIControlStateNormal];
|
[alertController.view addSubview:cancelButton];
|
cancelButton.layer.cornerRadius = 22.5;
|
cancelButton.titleLabel.font = UIFont.dhFont_f3;
|
[cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-15);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(20);
|
make.right.mas_equalTo(alertController.view.mas_centerX).offset(-7.5);
|
make.width.mas_equalTo((DH_SCREEN_SIZE_WIDTH - 140.0) / 2.0);
|
}];
|
cancelButton.tag = 0;
|
[cancelButton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
UIButton *otherBUtton = [UIButton buttonWithType:UIButtonTypeCustom];
|
otherBUtton.backgroundColor = UIColor.dhcolor_c1;
|
[otherBUtton setTitle:otherButtonTitle forState:UIControlStateNormal];
|
[otherBUtton setTitleColor:UIColor.dhcolor_c10 forState:UIControlStateNormal];
|
otherBUtton.layer.cornerRadius = 22.5;
|
otherBUtton.tag = 1;
|
otherBUtton.titleLabel.font = UIFont.dhFont_f3;
|
[alertController.view addSubview:otherBUtton];
|
[otherBUtton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
[otherBUtton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-15);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(alertController.view.mas_centerX).offset(7.5);
|
make.right.mas_equalTo(-20);
|
}];
|
|
UILabel *titleLabel = [[UILabel alloc] init];
|
titleLabel.text = title;
|
titleLabel.textColor = UIColor.dhcolor_c2;
|
titleLabel.font = [UIFont dhFont_t1Bold];
|
[alertController.view addSubview:titleLabel];
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(35);
|
make.left.mas_equalTo(20);
|
make.right.mas_equalTo(-20);
|
make.height.mas_equalTo(25);
|
}];
|
|
UILabel *messageLabel = [[UILabel alloc] init];
|
messageLabel.text = message;
|
messageLabel.textColor = UIColor.dhcolor_c2;
|
messageLabel.font = [UIFont dhFont_t4];
|
messageLabel.numberOfLines = 0;
|
[alertController.view addSubview:messageLabel];
|
[messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(titleLabel.mas_bottom).offset(35);
|
make.left.mas_equalTo(20);
|
make.right.mas_equalTo(-20);
|
make.bottom.mas_equalTo(cancelButton.mas_top).offset(-35);
|
}];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = vc.view;
|
alertController.popoverPresentationController.sourceRect = vc.view.frame;
|
}
|
|
[vc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
+ (DHAlertController *)showInViewController:(UIViewController *)vc
|
title:(NSString *)title
|
message:(NSString *)message
|
cancelButtonTitle:(NSString *)cancelButtonTitle
|
otherButtonTitles:(NSArray<NSString *> *)otherButtonTitles
|
handler:(DHAlertControllerHandler)handler {
|
DHAlertController *alertController = [DHAlertController 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];
|
}
|
}
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = vc.view;
|
alertController.popoverPresentationController.sourceRect = vc.view.frame;
|
}
|
|
[vc presentViewController:alertController animated:true completion:nil];
|
|
return alertController;
|
}
|
|
+ (DHAlertController *)showInViewController:(UIViewController *)vc
|
title:(NSString *)title
|
customView:(UIView *)customView
|
cancelButtonTitle:(NSString *)cancelButtonTitle
|
otherButtonTitle:(NSString *)otherButtonTitle
|
handler:(DHAlertControllerHandler)handler {
|
DHAlertController *alertController = [DHAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert];
|
alertController.handler = handler;
|
alertController.view.backgroundColor = [UIColor whiteColor];
|
if (alertController.view.subviews.count > 0) {
|
for (UIView *subview in alertController.view.subviews) {
|
subview.alpha = 0;
|
}
|
}
|
alertController.view.layer.cornerRadius = 7.5;
|
|
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
cancelButton.backgroundColor = UIColor.dhcolor_c3;
|
[cancelButton setTitle:cancelButtonTitle forState:UIControlStateNormal];
|
[cancelButton setTitleColor:UIColor.dhcolor_c43 forState:UIControlStateNormal];
|
[alertController.view addSubview:cancelButton];
|
cancelButton.layer.cornerRadius = 22.5;
|
cancelButton.titleLabel.font = UIFont.dhFont_f3;
|
[cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(alertController.view.mas_centerX).offset(-7.5);
|
make.width.mas_equalTo((DH_SCREEN_SIZE_WIDTH - 140.0) / 2.0);
|
}];
|
cancelButton.tag = 0;
|
[cancelButton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
UIButton *otherBUtton = [UIButton buttonWithType:UIButtonTypeCustom];
|
otherBUtton.backgroundColor = UIColor.dhcolor_c1;
|
[otherBUtton setTitle:otherButtonTitle forState:UIControlStateNormal];
|
[otherBUtton setTitleColor:UIColor.dhcolor_c10 forState:UIControlStateNormal];
|
otherBUtton.layer.cornerRadius = 22.5;
|
otherBUtton.tag = 1;
|
otherBUtton.titleLabel.font = UIFont.dhFont_f3;
|
[alertController.view addSubview:otherBUtton];
|
[otherBUtton addTarget:alertController action:@selector(didPressButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
[otherBUtton mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.bottom.mas_equalTo(-20);
|
make.height.mas_equalTo(45);
|
make.left.mas_equalTo(alertController.view.mas_centerX).offset(7.5);
|
make.right.mas_equalTo(-25);
|
}];
|
|
UILabel *titleLabel = [[UILabel alloc] init];
|
titleLabel.text = title;
|
titleLabel.textColor = UIColor.dhcolor_c2;
|
titleLabel.font = [UIFont dhFont_t1Bold];
|
[alertController.view addSubview:titleLabel];
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(35);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
}];
|
|
if (!customView) {
|
customView = [[UIView alloc] init];
|
}
|
|
[alertController.view addSubview:customView];
|
[customView mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.mas_equalTo(titleLabel.mas_bottom).offset(15.0);
|
make.left.mas_equalTo(25);
|
make.right.mas_equalTo(-25);
|
make.bottom.mas_equalTo(cancelButton.mas_top).offset(-15);
|
}];
|
|
//兼容ipad:弹出框崩溃问题
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
|
alertController.popoverPresentationController.sourceView = vc.view;
|
alertController.popoverPresentationController.sourceRect = vc.view.frame;
|
}
|
|
[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
|