zoukankan      html  css  js  c++  java
  • 自定义一个类似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(@"点击了确认按钮");

        }

    }

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

  • 相关阅读:
    MySQL启动和关闭命令总结
    MySQL数据库5.6版本首次安装Root密码问题
    tomcat 9性能调优注意事项
    扫除减脂之路上的几个小障碍
    MySQL常见面试题
    关于邮箱发送邮件二之附件及图片
    关于邮箱发送邮件
    关于算法
    python中常见的数据类型
    C++实现复数类的输入输出流以及+-*/的重载
  • 原文地址:https://www.cnblogs.com/WX95/p/4633084.html
Copyright © 2011-2022 走看看