自定义一个类似UIAlertView的弹出框

这个是和UIAlertView类似,但是可以自定义view的样式废话不多说,上代码:

首先第一步:创建一个继承自View的类如:

#import <UIKit/UIKit.h>

@class <#你自己的类名#>;

@protocol PopupViewDelegate <NSObject>

- (void)popupView:(<#你自己的类名#>*)popupView ClickedButtonAtIndex:(NSInteger)buttonIndex;

@end

@interface <#你自己的类名#> : UIView

/**初始化View

 * title   * 提示内容

 * message * 需要显示的内容

 * cancelButtonTitle *取消按钮的文字

 * okButtonTitles *确认按钮的文字

 * delegate  * 当前代理者

 */

- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitles:(NSString *)okButtonTitles delegate:(id)delegate;

/**弹出该View*/

- (void)show;

 @property (nonatomic,strong)id <PopupViewDelegate>  delegate;

 @end

/**上方的方法直接贴到View的.h文件中就好,当然类名需要更改的*/

 

//屏幕宽度

#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width

//获得屏幕高度

#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)

 #define kNoButtonW 120

#define kNoButtonH 35

#define kButtonRadius 15

#define kFontNameStrBold @"Helvetica-Bold"

#define kFontNameStrRegular @"Helvetica"

#import " <#你自己的类名#>"

@interface  <#你自己的类名#>()

/**中间黑色的View*/

@property (nonatomic,strong)UIView * blackeView;

/**提示框的Lable*/

@property (nonatomic,strong)UILabel * titleLable;

/**描述内容的Lable*/

@property (nonatomic,strong)UILabel * desLabel;

/**取消或者NO的button*/

@property (nonatomic,strong)UIButton * noButton;

/**YES或者OK的button*/

@property (nonatomic,strong)UIButton * yesButton;

@end

@implementation  <#你自己的类名#>

- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitles:(NSString *)okButtonTitles delegate:(id)delegate

{

    if (self = [super init]) {

        self.frame = CGRectMake(0, 0,SCREEN_WIDTH, SCREEN_HEIGHT);

        self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2];

        /**设置弹出View的动画*/

        [self setupWithBlackView];

        /**往黑色View中添加子控件*/

        [self setupWithAddControls];

        self.titleLable.text = title;

        self.desLabel.text = message;

        self.delegate = delegate;

        [self.noButton setTitle:cancelButtonTitle forState:UIControlStateNormal];

        [self.yesButton setTitle:okButtonTitles forState:UIControlStateNormal];

    }

    return self;

}

/**设置添加黑色View的动画*/

-(void)setupWithBlackView

{

    UIView * blackView =[[UIView alloc]init];

    blackView.layer.cornerRadius = 10;

    blackView.layer.masksToBounds = YES;

    self.blackeView = blackView;

    blackView.backgroundColor = [UIColor colorWithRed:31/255.0 green:31/255.0 blue:31/255.0 alpha:1];

    [self addSubview:blackView];

}

 

/**往黑色View中添加子控件*/

-(void)setupWithAddControls

{

    /**标题文本*/

    UILabel * titleLable = [[UILabel alloc]init];

    titleLable.numberOfLines = 0;

    titleLable.textAlignment = NSTextAlignmentCenter;

//    titleLable.backgroundColor = [UIColor redColor];

    titleLable.font = [UIFont fontWithName:kFontNameStrBold size:22];

    titleLable.textColor = [UIColor whiteColor];

    self.titleLable = titleLable;

    [self.blackeView addSubview:titleLable];

    

    /**内容的文本*/

    UILabel * descLable = [[UILabel alloc]init];

    self.desLabel = descLable;

    descLable.numberOfLines = 0;

    descLable.textAlignment = NSTextAlignmentCenter;

//    descLable.backgroundColor = [UIColor orangeColor];

    descLable.font = [UIFont fontWithName:kFontNameStrRegular size:15];

    descLable.textColor = [UIColor whiteColor];

    [self.blackeView addSubview:descLable];

    

    /**确认按钮的添加*/

    UIButton * yesButton = [[UIButton alloc]init];

    yesButton.tag = 2;

    [yesButton addTarget:self action:@selector(yesOrNOButtonClcik:) forControlEvents:UIControlEventTouchUpInside];

    self.yesButton  = yesButton;

    [yesButton setBackgroundColor:[UIColor colorWithRed:25/255.0 green:164/255.0 blue:58/255.0 alpha:1]];

    yesButton.titleLabel.font = [UIFont fontWithName:kFontNameStrBold size:17];

    [yesButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    yesButton.layer.cornerRadius = kButtonRadius;

    yesButton.layer.masksToBounds = YES;

    [self.blackeView addSubview:yesButton];

    

    /**取消按钮的添加*/

    UIButton * noButton =[[UIButton alloc]init];

    noButton.tag = 1;

    [noButton addTarget:self action:@selector(yesOrNOButtonClcik:) forControlEvents:UIControlEventTouchUpInside];

    [noButton setBackgroundColor:[UIColor colorWithRed:38/255.0 green:38/255.0 blue:38/255.0 alpha:1]];

    NSString * buttonstr = [NSString stringWithFormat:@"%@",noButton.titleLabel.text];

    NSInteger buttonLength =buttonstr.length;

    if (5< buttonLength) {

    noButton.titleLabel.font = [UIFont fontWithName:kFontNameStrBold size:15];

    yesButton.titleLabel.font= [UIFont fontWithName:kFontNameStrBold size:15];

    }else{

    noButton.titleLabel.font = [UIFont fontWithName:kFontNameStrBold size:17];

    }

    [noButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

    noButton.layer.cornerRadius = kButtonRadius;

    noButton.layer.masksToBounds = YES;

    self.noButton = noButton;

    [self.blackeView addSubview:noButton]; 

}

-(void)layoutSubviews

{

    //设置黑色View的frame

    self.blackeView.frame =CGRectMake(0, 0, self.bounds.size.width/1.2, 170);

   self.blackeView.center = CGPointMake(self.center.x, self.center.y);

    //设置titleLable的frame

    NSString * titlestr = [NSString stringWithFormat:@"%@",self.titleLable.text];

    NSInteger titlerlength =titlestr.length;

    if (30<titlerlength) {

        self.titleLable.frame = CGRectMake(10,0,self.blackeView.bounds.size.width/1.07 ,60);

    }else{

    self.titleLable.frame = CGRectMake(10, 10,self.blackeView.bounds.size.width/1.07 ,40);

    }

    //设置内容的lable

    self.desLabel.frame = CGRectMake(10,CGRectGetMaxY(self.titleLable.bounds),self.blackeView.bounds.size.width/1.07, 50);

    //设置NO的按钮frame

    CGFloat nobtnH = kNoButtonH;

    CGFloat nobtnW = kNoButtonW;

    self.noButton.frame = CGRectMake(10, CGRectGetMaxY(self.blackeView.bounds)-nobtnH-15, nobtnW, nobtnH);

        //设置YES的按钮frame

    self.yesButton.frame = CGRectMake(CGRectGetMaxX(self.blackeView.bounds)-nobtnW -10, CGRectGetMaxY(self.blackeView.bounds)-nobtnH-15 ,self.noButton.bounds.size.width, self.noButton.bounds.size.height);

    /**根据判断来设置frame*/

    [self stupOrEmpty];

}

-(void)stupOrEmpty

{

    if ([self.noButton.titleLabel.text isEqualToString:@""] ||self.noButton.titleLabel.text ==nil)

    {//如果No按钮没有文字则只显示YES按钮

        self.noButton.hidden = YES;

        self.yesButton.frame = CGRectMake(0,0, kNoButtonW +30, kNoButtonH);

        self.yesButton.center = CGPointMake(self.blackeView.bounds.size.width/2, CGRectGetMaxY(self.blackeView.bounds)-kNoButtonH);

    }else if ([self.yesButton.titleLabel.text isEqualToString:@""]|| self.yesButton.titleLabel.text == nil)

    {//如果YES按钮没有文字则只显示NO按钮

        self.yesButton.hidden = YES;

        self.noButton.frame = CGRectMake(0, 0, kNoButtonW+30, kNoButtonH);

        self.noButton.center = CGPointMake(self.blackeView.bounds.size.width/2, CGRectGetMaxY(self.blackeView.bounds)-kNoButtonH);

        [self.noButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    [self.noButton setBackgroundColor:[UIColor colorWithRed:25/255.0 green:164/255.0 blue:58/255.0 alpha:1]];

        

    }

    //判断文本是否有内容

    if([self.titleLable.text isEqualToString:@""]||self.titleLable.text ==nil)

    {

        self.desLabel.font = [UIFont fontWithName:kFontNameStrBold size:20];

    self.desLabel.frame = CGRectMake(10,CGRectGetMaxY(self.titleLable.bounds)-20,self.blackeView.bounds.size.width/1.07, 90);

        self.titleLable.hidden = YES;

    }

 

}

-(void)yesOrNOButtonClcik:(UIButton*)buttonTag

{

    if ([self.delegate respondsToSelector:@selector(popupView:ClickedButtonAtIndex:)]) {

        [self.delegate popupView:self ClickedButtonAtIndex:buttonTag.tag];

    }

    [self removeSelf];

}

 

- (void)removeSelf

{

    [UIView animateWithDuration:0.38 animations:^{

        self.alpha = 0;

    }completion:^(BOOL finished) {

        [self removeFromSuperview];

    }];

}

- (void)show

{

    UIWindow *window = [UIApplication sharedApplication].keyWindow;

    [window addSubview:self];

    self.alpha = 0;

    self.blackeView.transform = CGAffineTransformMakeScale(1.08, 1.08);

    [UIView animateWithDuration:0.38 animations:^{

        self.alpha = 1;

        self.blackeView.transform = CGAffineTransformIdentity;

    }];

}

@end

 

/**上面这个就是放在.m里面了*/

<PopupViewDelegate>

接下来你只需要在你要响应的点击事件里面去导入这个View的头文件和遵守它的代理实现代理方法就可以了

PopupView * popupV = [[PopupView alloc]initWithTitle:@"Are You?" message:@"你猜我我猜你猜我猜你猜我是谁!" cancelButtonTitle:@"Helvetica" okButtonTitles:@"OK" delegate:self];

    [popupV show];

 

/**代理方法*/

- (void)popupView:(PopupView *)popupView ClickedButtonAtIndex:(NSInteger)buttonIndex{

    if (popupView.tag == 1) {

        NSLog(@"点击了取消按钮");

    }else{

        NSLog(@"点击了确认按钮");

    }

}

好了一个自定义的弹出框就搞定了!

posted @ 2015-07-09 14:29  WX95  阅读(302)  评论(0编辑  收藏  举报