php教程

超轻量级php框架startmvc

iOS自定义提示弹出框实现类似UIAlertView的效果

更新时间:2020-03-15 04:57:12 作者:startmvc
首先来看看实现的效果图下面话不多说,以下是实现的示例代码#import<UIKit/UIKit.h>typedefv

首先来看看实现的效果图

下面话不多说,以下是实现的示例代码


#import <UIKit/UIKit.h>

typedef void(^AlertResult)(NSInteger index);

@interface XLAlertView : UIView

@property (nonatomic,copy) AlertResult resultIndex;

- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message sureBtn:(NSString *)sureTitle cancleBtn:(NSString *)cancleTitle;

- (void)showXLAlertView;

@end

#import "XLAlertView.h"

///alertView 宽
#define AlertW 280
///各个栏目之间的距离
#define XLSpace 10.0

@interface XLAlertView()

//弹窗
@property (nonatomic,retain) UIView *alertView;
//title
@property (nonatomic,retain) UILabel *titleLbl;
//内容
@property (nonatomic,retain) UILabel *msgLbl;
//确认按钮
@property (nonatomic,retain) UIButton *sureBtn;
//取消按钮
@property (nonatomic,retain) UIButton *cancleBtn;
//横线线
@property (nonatomic,retain) UIView *lineView;
//竖线
@property (nonatomic,retain) UIView *verLineView;

@end

@implementation XLAlertView

- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message sureBtn:(NSString *)sureTitle cancleBtn:(NSString *)cancleTitle
{
 if (self == [super init]) {

 self.frame = [UIScreen mainScreen].bounds;

 self.backgroundColor = [UIColor colorWithWhite:0.8 alpha:0.6];

 self.alertView = [[UIView alloc] init];
 self.alertView.backgroundColor = [UIColor whiteColor];
 self.alertView.layer.cornerRadius = 5.0;

 self.alertView.frame = CGRectMake(0, 0, AlertW, 100);
 self.alertView.layer.position = self.center;

 if (title) {

 self.titleLbl = [self GetAdaptiveLable:CGRectMake(2*XLSpace, 2*XLSpace, AlertW-4*XLSpace, 20) AndText:title andIsTitle:YES];
 self.titleLbl.textAlignment = NSTextAlignmentCenter;

 [self.alertView addSubview:self.titleLbl];

 CGFloat titleW = self.titleLbl.bounds.size.width;
 CGFloat titleH = self.titleLbl.bounds.size.height;

 self.titleLbl.frame = CGRectMake((AlertW-titleW)/2, 2*XLSpace, titleW, titleH);

 }
 if (message) {

 self.msgLbl = [self GetAdaptiveLable:CGRectMake(XLSpace, CGRectGetMaxY(self.titleLbl.frame)+XLSpace, AlertW-2*XLSpace, 20) AndText:message andIsTitle:NO];
 self.msgLbl.textAlignment = NSTextAlignmentCenter;

 [self.alertView addSubview:self.msgLbl];

 CGFloat msgW = self.msgLbl.bounds.size.width;
 CGFloat msgH = self.msgLbl.bounds.size.height;

 self.msgLbl.frame = self.titleLbl?CGRectMake((AlertW-msgW)/2, CGRectGetMaxY(self.titleLbl.frame)+XLSpace, msgW, msgH):CGRectMake((AlertW-msgW)/2, 2*XLSpace, msgW, msgH);
 }

 self.lineView = [[UIView alloc] init];
 self.lineView.frame = self.msgLbl?CGRectMake(0, CGRectGetMaxY(self.msgLbl.frame)+2*XLSpace, AlertW, 1):CGRectMake(0, CGRectGetMaxY(self.titleLbl.frame)+2*XLSpace, AlertW, 1);
 self.lineView.backgroundColor = [UIColor colorWithWhite:0.8 alpha:0.6];
 [self.alertView addSubview:self.lineView];

 //两个按钮
 if (cancleTitle && sureTitle) {

 self.cancleBtn = [UIButton buttonWithType:UIButtonTypeSystem];
 self.cancleBtn.frame = CGRectMake(0, CGRectGetMaxY(self.lineView.frame), (AlertW-1)/2, 40);
 [self.cancleBtn setBackgroundImage:[self imageWithColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]] forState:UIControlStateNormal];
 [self.cancleBtn setBackgroundImage:[self imageWithColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]] forState:UIControlStateSelected];
 [self.cancleBtn setTitle:cancleTitle forState:UIControlStateNormal];
 //[self.cancleBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
 self.cancleBtn.tag = 1;
 [self.cancleBtn addTarget:self action:@selector(buttonEvent:) forControlEvents:UIControlEventTouchUpInside];

 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.cancleBtn.bounds byRoundingCorners:UIRectCornerBottomLeft cornerRadii:CGSizeMake(5.0, 5.0)];
 CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
 maskLayer.frame = self.cancleBtn.bounds;
 maskLayer.path = maskPath.CGPath;
 self.cancleBtn.layer.mask = maskLayer;

 [self.alertView addSubview:self.cancleBtn];
 }

 if (cancleTitle && sureTitle) {
 self.verLineView = [[UIView alloc] init];
 self.verLineView.frame = CGRectMake(CGRectGetMaxX(self.cancleBtn.frame), CGRectGetMaxY(self.lineView.frame), 1, 40);
 self.verLineView.backgroundColor = [UIColor colorWithWhite:0.8 alpha:0.6];
 [self.alertView addSubview:self.verLineView];
 }

 if(sureTitle && cancleTitle){

 self.sureBtn = [UIButton buttonWithType:UIButtonTypeSystem];
 self.sureBtn.frame = CGRectMake(CGRectGetMaxX(self.verLineView.frame), CGRectGetMaxY(self.lineView.frame), (AlertW-1)/2+1, 40);
 [self.sureBtn setBackgroundImage:[self imageWithColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]] forState:UIControlStateNormal];
 [self.sureBtn setBackgroundImage:[self imageWithColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]] forState:UIControlStateSelected];
 [self.sureBtn setTitle:sureTitle forState:UIControlStateNormal];
 //[self.sureBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
 self.sureBtn.tag = 2;
 [self.sureBtn addTarget:self action:@selector(buttonEvent:) forControlEvents:UIControlEventTouchUpInside];

 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.sureBtn.bounds byRoundingCorners:UIRectCornerBottomRight cornerRadii:CGSizeMake(5.0, 5.0)];
 CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
 maskLayer.frame = self.sureBtn.bounds;
 maskLayer.path = maskPath.CGPath;
 self.sureBtn.layer.mask = maskLayer;

 [self.alertView addSubview:self.sureBtn];

 }

 //只有取消按钮
 if (cancleTitle && !sureTitle) {

 self.cancleBtn = [UIButton buttonWithType:UIButtonTypeSystem];
 self.cancleBtn.frame = CGRectMake(0, CGRectGetMaxY(self.lineView.frame), AlertW, 40);
 [self.cancleBtn setBackgroundImage:[self imageWithColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]] forState:UIControlStateNormal];
 [self.cancleBtn setBackgroundImage:[self imageWithColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]] forState:UIControlStateSelected];
 [self.cancleBtn setTitle:cancleTitle forState:UIControlStateNormal];
 //[self.cancleBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
 self.cancleBtn.tag = 1;
 [self.cancleBtn addTarget:self action:@selector(buttonEvent:) forControlEvents:UIControlEventTouchUpInside];

 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.cancleBtn.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(5.0, 5.0)];
 CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
 maskLayer.frame = self.cancleBtn.bounds;
 maskLayer.path = maskPath.CGPath;
 self.cancleBtn.layer.mask = maskLayer;

 [self.alertView addSubview:self.cancleBtn];
 }

 //只有确定按钮
 if(sureTitle && !cancleTitle){

 self.sureBtn = [UIButton buttonWithType:UIButtonTypeSystem];
 self.sureBtn.frame = CGRectMake(0, CGRectGetMaxY(self.lineView.frame), AlertW, 40);
 [self.sureBtn setBackgroundImage:[self imageWithColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]] forState:UIControlStateNormal];
 [self.sureBtn setBackgroundImage:[self imageWithColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.2]] forState:UIControlStateSelected];
 [self.sureBtn setTitle:sureTitle forState:UIControlStateNormal];
 //[self.sureBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
 self.sureBtn.tag = 2;
 [self.sureBtn addTarget:self action:@selector(buttonEvent:) forControlEvents:UIControlEventTouchUpInside];

 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.sureBtn.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(5.0, 5.0)];
 CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
 maskLayer.frame = self.sureBtn.bounds;
 maskLayer.path = maskPath.CGPath;
 self.sureBtn.layer.mask = maskLayer;

 [self.alertView addSubview:self.sureBtn];

 }

 //计算高度
 CGFloat alertHeight = cancleTitle?CGRectGetMaxY(self.cancleBtn.frame):CGRectGetMaxY(self.sureBtn.frame);
 self.alertView.frame = CGRectMake(0, 0, AlertW, alertHeight);
 self.alertView.layer.position = self.center;

 [self addSubview:self.alertView];
 }

 return self;
}

#pragma mark - 弹出 -
- (void)showXLAlertView
{
 UIWindow *rootWindow = [UIApplication sharedApplication].keyWindow;
 [rootWindow addSubview:self];
 [self creatShowAnimation];
}

- (void)creatShowAnimation
{
 self.alertView.layer.position = self.center;
 self.alertView.transform = CGAffineTransformMakeScale(0.90, 0.90);
 [UIView animateWithDuration:0.25 delay:0 usingSpringWithDamping:0.8 initialSpringVelocity:1 options:UIViewAnimationOptionCurveLinear animations:^{
 self.alertView.transform = CGAffineTransformMakeScale(1.0, 1.0);
 } completion:^(BOOL finished) {
 }];
}

#pragma mark - 回调 -设置只有2 -- > 确定才回调
- (void)buttonEvent:(UIButton *)sender
{
 if (sender.tag == 2) {
 if (self.resultIndex) {
 self.resultIndex(sender.tag);
 }
 }
 [self removeFromSuperview];
}

-(UILabel *)GetAdaptiveLable:(CGRect)rect AndText:(NSString *)contentStr andIsTitle:(BOOL)isTitle
{
 UILabel *contentLbl = [[UILabel alloc] initWithFrame:rect];
 contentLbl.numberOfLines = 0;
 contentLbl.text = contentStr;
 contentLbl.textAlignment = NSTextAlignmentCenter;
 if (isTitle) {
 contentLbl.font = [UIFont boldSystemFontOfSize:16.0];
 }else{
 contentLbl.font = [UIFont systemFontOfSize:14.0];
 }

 NSMutableAttributedString *mAttrStr = [[NSMutableAttributedString alloc] initWithString:contentStr];
 NSMutableParagraphStyle *mParaStyle = [[NSMutableParagraphStyle alloc] init];
 mParaStyle.lineBreakMode = NSLineBreakByCharWrapping;
 [mParaStyle setLineSpacing:3.0];
 [mAttrStr addAttribute:NSParagraphStyleAttributeName value:mParaStyle range:NSMakeRange(0,[contentStr length])];
 [contentLbl setAttributedText:mAttrStr];
 [contentLbl sizeToFit];

 return contentLbl;
}

-(UIImage *)imageWithColor:(UIColor *)color
{
 CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
 UIGraphicsBeginImageContext(rect.size);
 CGContextRef context = UIGraphicsGetCurrentContext();
 CGContextSetFillColorWithColor(context, [color CGColor]);
 CGContextFillRect(context, rect);
 UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 return theImage;
}

@end

在需要使用的地方直接调用


XLAlertView *xlAlertView = [[XLAlertView alloc] initWithTitle:@"自定义UIAlertView" message:@"不喜勿喷,大神多多指导。不胜感激" sureBtn:@"确认" cancleBtn:@"取消"];
xlAlertView.resultIndex = ^(NSInteger index){
//回调---处理一系列动作
};
[xlAlertView showXLAlertView];

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位iOS开发们能有所帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

ios自定义uialertview 自定义uialertview ios 弹出自定义view