首页 > 其他分享 >iOS开发之自己封装的提示框(警告框)样式BHAlertView

iOS开发之自己封装的提示框(警告框)样式BHAlertView

时间:2022-11-28 17:01:55浏览次数:42  
标签:bhAlertV self iOS UIColor delegate BHAlertView 提示框 buttonTitles size


最近需要使用到提示框(警告框)进行信息的展示和提醒,所以进行了一个类的封装,想用Swift调用此OC文件,但是发现有些困难,所以暂时先把OC代码进行展示,随后再好好研究一下在Swift中的使用。

对于封装文件,首先要设计界面,其次是数据之间的传递过程

初始化样式方法:

- (instancetype)initWithTitle:(NSString *)title icon:(UIImage *)icon message:(NSString *)message delegate:(id<BHAlertViewDelegate>)delegate buttonTitles:(NSString *)buttonTitles, ... {
    if (self = [super initWithFrame:[UIScreen mainScreen].bounds]) {
        _icon = icon;
        _title = title;
        _message = message;
        _delegate = delegate;
        _buttonArray = [NSMutableArray array];
        _buttonTitleArray = [NSMutableArray array];
        
        //在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表,下面就是为了实现方法中"..."的效果
        va_list args;
        va_start(args, buttonTitles);
        if (buttonTitles)
        {
            [_buttonTitleArray addObject:buttonTitles];
            while (1)
            {
                NSString *  otherButtonTitle = va_arg(args, NSString *);
                if(otherButtonTitle == nil) {
                    break;
                } else {
                    [_buttonTitleArray addObject:otherButtonTitle];
                }
            }
        }
        va_end(args);
        
        self.backgroundColor = [UIColor clearColor];
        
        _backgroundView = [[UIView alloc] initWithFrame:self.frame];
        _backgroundView.backgroundColor = [UIColor blackColor];
        [self addSubview:_backgroundView];
        [self initContentView];
    }
    return self;
}

获取标题、信息的大小

//----------获取各控件Size大小
- (CGSize)getTitleSize {
    UIFont *font = [UIFont systemFontOfSize:TITLE_FONT_SIZE];
    
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
    NSDictionary *attributes = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle.copy};
    
    CGSize size = [_title boundingRectWithSize:CGSizeMake(contentViewWidth - (MARGIN_LEFT_SMALL + MARGIN_RIGHT_SMALL + _iconImageView.frame.size.width + SPACE_SMALL), 2000) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;
    
    size.width = ceil(size.width);
    size.height = ceil(size.height);
    
    return size;
}
- (CGSize)getMessageSize {
    UIFont *font = [UIFont systemFontOfSize:MESSAGE_FONT_SIZE];
    
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = MESSAGE_LINE_SPACE;
    NSDictionary *attributes = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle.copy};
    
    CGSize size = [_message boundingRectWithSize:CGSizeMake(contentViewWidth - (MARGIN_LEFT_LARGE + MARGIN_RIGHT_LARGE), 2000) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;
    
    size.width = ceil(size.width);
    size.height = ceil(size.height);
    
    return size;
}

设置代理方法

//----------按钮点击执行代理方法
- (void)buttonWithPressed:(UIButton *)button {
    if (_delegate && [_delegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) {
        NSInteger index = [_buttonTitleArray indexOfObject:button.titleLabel.text];
        [_delegate alertView:self clickedButtonAtIndex:index];
    }
    [self hide];
}

然后添加一些设置字体大小颜色,显示,隐藏的方法

最后是对封装类的使用

BHAlertView *bhAlertV = [[BHAlertView alloc] initWithTitle:@"设置按钮字体的颜色和大小" icon:[UIImage imageNamed:@"baby_alert_icon"] message:@"设置按钮字体的颜色和大小设置按钮字体的颜色和大小" delegate:self buttonTitles:@"取消",@"修改",@"删除", nil];
            //设置标题和内容的字体颜色、大小
            [bhAlertV setTitleColor:[UIColor redColor] fontSize:17];
            [bhAlertV setMessageColor:[UIColor cyanColor] fontSize:12];
            //设置按钮字体的颜色和大小
            [bhAlertV setButtonTitleColor:[UIColor orangeColor] fontSize:15 atIndex:0];
            [bhAlertV setButtonTitleColor:[UIColor blueColor] fontSize:17 atIndex:1];
            [bhAlertV setButtonTitleColor:[UIColor purpleColor] fontSize:19 atIndex:2];
            
            [bhAlertV show];

效果图:

iOS开发之自己封装的提示框(警告框)样式BHAlertView_警告框

     

iOS开发之自己封装的提示框(警告框)样式BHAlertView_UIAlertView_02

     

iOS开发之自己封装的提示框(警告框)样式BHAlertView_UIAlertView_03

iOS开发之自己封装的提示框(警告框)样式BHAlertView_提示框_04

     

iOS开发之自己封装的提示框(警告框)样式BHAlertView_delegate_05

     

iOS开发之自己封装的提示框(警告框)样式BHAlertView_delegate_06

iOS开发之自己封装的提示框(警告框)样式BHAlertView_提示框_07


标签:bhAlertV,self,iOS,UIColor,delegate,BHAlertView,提示框,buttonTitles,size
From: https://blog.51cto.com/u_15894905/5892270

相关文章

  • axios的封装
    新建network文件夹及request.js  importaxiosfrom'axios'exportfunctionrequest(config){//创建axios实例constinstance=axios.create({......
  • axios请求
    安装npminstallaxios--save axios基本使用axios({url:'http://123.207.32.32:8000/home/multidata',method:'get'//不写默认get方式}).then(res......
  • 在iOS中使用NSURLProtocol进行网络代理
    在iOS中使用NSURLProtocol进行网络代理一引言网络能力是互联网应用程序必不可少的功能。随着应用程序的复杂,对网络的依赖性也会逐渐增高。如何统一的处理请求头,统一的处......
  • BIOS设置 翻译中文图文教程(一)
    BIOS设置图解教程­BIOS(基本输入/输出系统)是被固化在计算机CMOSRAM芯片中的一组程序,为计算机提供最初的、最直接的硬件控制。BIOS主要有两类∶AWARDBI......
  • 10个必需的iOS开发工具和资源
    OpenProject–MicrosoftProject的替代软件发表于​​2007年09月09日​​​由​​​DavidXiao​​<!--.entry-meta-->版权声明:本文由[​​David.Xiao​......
  • 你的第一个 iOS 应用 – 2.开始上手
    要跟随本教程创建iOS应用,请先下载并安装Xcode4.3或更新版本。Xcode是苹果公司的集成式开发环境(IDE),可以同时用来开发iOS和MacOSX应用程序。当你在Mac电脑上安......
  • IOS13及以上Fiddler不能抓包问题解决
    iOS 上一般情况下信任HTTPS证书即可抓HTTPS的包(除非APP开启了防止抓包),但最近发现iOS 13以上出现即使安装并信任了证书,当用safari浏览百度时仍出现是否信任该网站......
  • iOS 系统架构及常用框架
    1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多2.iOS的系统架构分为四层,由上到下一次为:可触摸层(CocoaTouchlayer)、媒体层(Medialayer)、核心......
  • [Object-C语言随笔之一]Mac os 下搭建iOS开发环境
    ​​ 李华明Himi ​​​原创,转载务必在明显处注明 从这一章开始,Himi将一步一步的带大家走进Iphone4的开发,当然开发语言则不再是Java,而是Objective-C,简单来说是C的变种......
  • 【iOS-Cocos2d游戏开发之十九】游戏数据存储的四种常用方式NSKeyedArchiver/NSUserDef
    ​​ 李华明Himi ​​​原创,转载务必在明显处注明      OK,今天Himi介绍游戏存储这一块,在Android游戏开发中Himi介绍了好几种保存的方式和形式,那么在iOS中也有......