主要是使用kvc的方式来自定义UIAlertController的样式:
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"标题" message:@"内容" preferredStyle:UIAlertControllerStyleAlert];
// 使用富文本来改变alert的title字体大小和颜色
NSMutableAttributedString *titleText = [[NSMutableAttributedString alloc] initWithString:@"这里是标题"];
[titleText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:24] range:NSMakeRange(0, 2)];
[titleText addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 2)];
[alert setValue:titleText forKey:@"attributedTitle"];
// 使用富文本来改变alert的message字体大小和颜色
// NSMakeRange(0, 2) 代表:从0位置开始 两个字符
NSMutableAttributedString *messageText = [[NSMutableAttributedString alloc] initWithString:@"这里是正文信息"];
[messageText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:10] range:NSMakeRange(0, 6)];
[messageText addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 2)];
[messageText addAttribute:NSForegroundColorAttributeName value:[UIColor brownColor] range:NSMakeRange(3, 3)];
[alert setValue:messageText forKey:@"attributedMessage"];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
// 设置按钮背景图片
UIImage *accessoryImage = [[UIImage imageNamed:@"selectRDImag.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[cancelAction setValue:accessoryImage forKey:@"image"];
// 设置按钮的title颜色
[cancelAction setValue:[UIColor lightGrayColor] forKey:@"titleTextColor"];
// 设置按钮的title的对齐方式
[cancelAction setValue:[NSNumber numberWithInteger:NSTextAlignmentLeft] forKey:@"titleTextAlignment"];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:okAction];
[alert addAction:cancelAction];
[self presentViewController:alert animated:YES completion:nil];
效果如图
效果图
当然除了这种方法,还有别的方法去自定义提示框,因为假如你要为整个提示框假如背景图片,那么上述的方法就不可行了.这里我们可以自定义一个view,我觉得这才是是真正的实现自定义吧.具体如下:
先来一张效果图
#import <UIKit/UIKit.h>
@interface UpDataView : UIView
@property(nonatomic,strong)UIButton *exit;
@property(nonatomic,strong)UIButton *updataBtn;
@property(nonatomic,strong)UILabel *version;
@property(nonatomic,strong)UILabel *content;
- (void)show;
- (void)closeComplete:(void(^)(BOOL finished))complete;
@end
#import "UpDataView.h"
@interface UpDataView()
//界面
@property(nonatomic,strong)UIView * bgView;
@end
@implementation UpDataView
- (void)closeComplete:(void(^)(BOOL finished))complete{
[UIView animateWithDuration:0.2 animations:^{
self.backgroundColor = [UIColor colorWithWhite:0.f alpha:0];
self.bgView.transform = CGAffineTransformMakeScale(0.001f, 0.001f)
; } completion:complete];
}
- (id)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor colorWithWhite:0.f alpha:0];
[self creatUI];
self.userInteractionEnabled = YES;
//下面的是重点(利用view的transform,即形变属性设置出动画效果)
self.bgView.transform = CGAffineTransformMakeScale(0.0, 0.0);
[UIView animateWithDuration:0.4 delay:0 usingSpringWithDamping:0.7 initialSpringVelocity:3 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.7];
self.bgView.transform = CGAffineTransformIdentity;
} completion:nil];
}
return self;
}
- (void)creatUI{
UIImageView *img = [[UIImageView alloc]initWithFrame:CGRectMake(0, -57, self.bgView.frame.size.width, 155)];
img.image = [UIImage imageNamed:@"版本更新"];
img.userInteractionEnabled = YES;
[self.bgView addSubview:img];
//
UILabel *lab = [[UILabel alloc]init];
lab.text = @"发现新版本";
lab.textColor = REDCOLOR;
lab.textAlignment = NSTextAlignmentCenter;
lab.font = [UIFont systemFontOfSize:25];
[self.bgView addSubview:lab];
[lab mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(@0);
make.right.equalTo(@0);
make.top.equalTo(@90);
}];
self.exit = [[UIButton alloc]initWithFrame:CGRectMake(self.bgView.frame.size.width-40, 60, 40, 40)];
[img addSubview:self.exit];
self.updataBtn = [UIButton buttonWithType:UIButtonTypeCustom];
self.updataBtn.backgroundColor = REDCOLOR;
self.updataBtn.layer.cornerRadius = 5;
self.updataBtn.layer.masksToBounds = YES;
[self.updataBtn setTitle:@"立即更新" forState:UIControlStateNormal];
[self.updataBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.bgView addSubview:self.updataBtn];
[self.updataBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(@20);
make.right.equalTo(@-20);
make.bottom.equalTo(@-20);
make.height.equalTo(@40);
}];
self.version = [[UILabel alloc]init];
self.version.textColor = BLACKCOLOR;
self.version.font = [UIFont systemFontOfSize:15];
[self.bgView addSubview:self.version];
[self.version mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(lab.mas_bottom).equalTo(@10);
make.left.equalTo(@20);
make.right.equalTo(@-20);
}];
self.content = [[UILabel alloc]init];
self.content.textColor = BLACKCOLOR;
self.content.numberOfLines = 0;
self.content.font = [UIFont systemFontOfSize:15];
[self.bgView addSubview:self.content];
__weak typeof(self) temp = self;
[self.content mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(temp.version.mas_bottom).equalTo(@0);
make.left.equalTo(@20);
make.right.equalTo(@-20);
}];
}
- (UIView *)bgView{
if (_bgView == nil) {
_bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREENWIDTH-114, SCREENHEIGHT-380)];
_bgView.layer.position = CGPointMake(self.centerX, self.centerY-50);
_bgView.layer.anchorPoint = CGPointMake(0.5, 0.5);
_bgView.backgroundColor = [UIColor whiteColor];
_bgView.layer.cornerRadius = 15;
[self addSubview:_bgView];
}
return _bgView;
}
@end
//当点击了不更新移除提示框
-(void)exitAction{
[UIView animateWithDuration:0.2 animations:^{
self.updata.backgroundColor = [UIColor colorWithWhite:0.f alpha:0];
self.updata.transform = CGAffineTransformMakeScale(0.001f, 0.001f)
; } completion:^(BOOL finished) {
[self.updata removeFromSuperview];
self.view.userInteractionEnabled = YES;
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}];
}