IOS 自定义AlertController

1.前言

项目中要自定义提示框,参考了一些文章,然后自己写了一个。


QQ20171122-094248.gif

2实现

  • 系统的UIAlertController的使用

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"这是一个》> alert" message:@"又如何?" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:cancel];
[self presentViewController:alert animated:YES completion:nil];

UIAlertController是继承UIViewController的。我们定义一个viewcontroller,然后present。

  • 在调用[self presentViewController:alert animated:YES completion:nil]的时候,会发现系统已经给你做好了一个动画,是从底部往上弹,还有就是原来的view controller(也就是[self presentViewController:alert animated:YES completion:nil]中的self)不见了,我们要的不是这样的效果。这里presentViewController使用的是Modal转场,UIKit 已经为 Modal 转场实现了多种效果,当 UIViewController的modalPresentationStyle属性为UIModalPresentationCustom或UIModalPresentationFullScreen时,我们就有机会定制转场效果,此时modalTransitionStyle指定的转场动画将会被忽略。因此我们需要改写modalPresentationStyle的默认属性值,默认是UIModalTransitionStyleCoverVertical,也就是从下往上,原来的view controller不见了的形式。

+(instancetype)BPAlertControllerWithTitle:(NSString *)title message:(NSString *)message cancel:(NSString *)cancel sure:(NSString *)sure action:(void (^)(void))buttonAction{

BPAlertController *alert = [[BPAlertController alloc] init];

alert.modalPresentationStyle = UIModalPresentationCustom;
alert.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
alert.titleText = title;
alert.messageText = message;
alert.cancelText = cancel&&cancel.length>0 ? cancel : @"取消";
alert.sureText = sure;
alert.buttonAction = buttonAction;

return alert;
}

3.GIT地址

我的DEMO

你可能感兴趣的:(IOS 自定义AlertController)