BAAlert - iOS alert 和 actionSheet 的封装


MIT
iOS
Objective-C

软件简介

BAAlert

BAHome Team Name




1、功能及简介

  • 1、手势触摸隐藏开关,可随时开关

  • 2、可以自定义背景图片、背景颜色、按钮颜色

  • 3、可以添加文字和图片,且可以滑动查看!
  • 4、横竖屏适配完美,注意:自定义 alert 不支持横屏
  • 5、有各种炫酷动画展示你的 alert
  • 6、可以自定义每个按钮颜色

2、图片示例

BAAlert1.gif
BAAlert2.gif

3、安装、导入示例和源码地址

  • 1、pod 导入【最新版本: 】:

pod 'BAAlert' pod 'BAAlert-Swift'

如果发现 pod search BAAlert 搜索出来的不是最新版本,需要在终端执行 cd 转换文件路径命令退回到 desktop,然后执行 pod setup 命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了。

具体步骤:
- pod setup : 初始化
- pod repo update : 更新仓库
- pod search BAAlert
* 2、文件夹拖入:下载demo,把 BAAlert 文件夹拖入项目即可,

  • 3、导入头文件:

#import "BAAlert_OC.h"

  • 4、项目源码地址:

OC 版 :https://github.com/BAHome/BAAlert

swift 版 :https://github.com/BAHome/BAAlert-
Swift

4、BAAlert 的类结构及 demo 示例

BAAlert.png

BAAlert_OC.h

#ifndef BAAlert_OC_h  
#define BAAlert_OC_h

#import "BAAlert.h"  
#import "BAActionSheet.h"  
#import "BAKit_ConfigurationDefine.h"

/*!  
*********************************************************************************  
************************************ 更新说明 ************************************  
*********************************************************************************  

欢迎使用 BAHome 系列开源代码 !  
如有更多需求,请前往:https://github.com/BAHome  

项目源码地址:  
OC 版 :https://github.com/BAHome/BAAlert  

最新更新时间:2017-06-23 【倒叙】  
最新Version:【Version:1.2.2】  
更新内容:  
1.2.2.1、优化部分宏定义  

最新更新时间:2017-06-19 【倒叙】  

最新Version:【Version:1.2.0】  

更新内容:  

1.2.0.1、统一全局宏定义文件,优化代码规范  


最新更新时间:2017-05-20 【倒叙】  

最新Version:【Version:1.1.9】  

更新内容:  

1.1.9.1、修复动画过度白屏问题  

最新更新时间:2017-05-15 【倒叙】  

最新Version:【Version:1.1.8】  

更新内容:  

1.1.8.1、精简代码结构,删除多余或者重复代码  

1.1.8.2、规范代码属性和方法命名,原有方法名和属性名有较大改动,忘见谅  

1.1.8.3、重构 actionSheet,新增多种样式  


最新更新时间:2017-05-13 【倒叙】  

最新Version:【Version:1.1.7】  

更新内容:  

1.1.7.1、精简代码结构,删除多余或者重复代码  

1.1.7.2、规范代码属性和方法命名,原有方法名和属性名有较大改动,忘见谅  

1.1.7.3、优化部分动画  

1.1.7.4、subView 布局优化  

1.1.7.5、actionSheet 新增自定义文字颜色、title 字体颜色  


最新更新时间:2017-05-10 【倒叙】  

最新Version:【Version:1.1.5】  

更新内容:  

1.1.5.1、删除原有封装内部按钮点击事件中 ba_dismissAlertView 方法,此方法可在外部自由调用  


最新更新时间:2017-05-09 【倒叙】  

最新Version:【Version:1.1.4】  

更新内容:  

1.1.4.1、pod 更新xib 文件  


最新更新时间:2017-05-08 【倒叙】  
最新Version:【Version:1.1.0】  
更新内容:  
1.1.0.1、优化方法名命名规范  
1.1.0.2、新增键盘内部处理  
1.1.0.3、用原生 autoLayout 重构,自定义 alert 的布局再也不是问题了  
1.1.0.4、优化代码结构,修复内在隐藏内存泄漏  
1.1.0.5、新增 BAAlert_OC.h 文件,只需导入 BAAlert_OC.h 一个文件就可以使用 alert 和 actionSheet 了  
1.1.0.6、删除了部分代码和属性,具体见源码 和 demo  

*/

#endif /* BAAlert_OC_h */  

BAAlert.h

#import  
#import "BAAlert_Config.h"

@class BAAlert;

typedef void(^BAAlert_ConfigBlock)(BAAlert *tempView);

@interface BAAlert : UIView

/*! 背景颜色 默认:半透明*/  
@property (nonatomic, strong) UIColor *bgColor;

/*! 是否开启边缘触摸隐藏 alert 默认:NO */  
@property (nonatomic, assign) BOOL isTouchEdgeHide;

/*! 背景图片名字 默认:没有图片*/  
@property (nonatomic, strong) NSString *bgImageName;

/*! 是否开启进出场动画 默认:NO,如果 YES ,并且同步设置进出场动画枚举为默认值:1 */  
@property (nonatomic, assign, getter=isShowAnimate) BOOL showAnimate;

/*! 进出场动画枚举 默认:1 ,并且默认开启动画开关 */  
@property (nonatomic, assign) BAAlertAnimatingStyle animatingStyle;

/*! 背景高斯模糊枚举 默认:没有模糊效果 */  
@property (nonatomic, assign) BAAlertBlurEffectStyle blurEffectStyle;

/*!  
* 创建一个完全自定义的 alertView,注意:【自定义 alert 只适用于竖屏状态!】  
*  
* @param customView 自定义 View  
* @param configuration 属性配置:如 bgColor、buttonTitleColor、isTouchEdgeHide...  
*/  
\+ (void)ba_alertShowCustomView:(UIView *)customView  
configuration:(BAAlert_ConfigBlock) configuration;

/*!  
* 创建一个类似于系统的alert  
*  
* @param title 标题:可空  
* @param message 消息内容:可空  
* @param image 图片:可空  
* @param buttonTitleArray 按钮标题:不可空  
* @param buttonTitleColorArray 按钮标题颜色:可空,默认蓝色  
* @param configuration 属性配置:如 bgColor、buttonTitleColor、isTouchEdgeHide...  
* @param actionBlock 按钮的点击事件处理  
*/  
\+ (void)ba_alertShowWithTitle:(NSString *)title  
message:(NSString *)message  
image:(UIImage *)image  
buttonTitleArray:(NSArray *)buttonTitleArray  
buttonTitleColorArray:(NSArray *)buttonTitleColorArray  
configuration:(BAAlert_ConfigBlock)configuration  
actionBlock:(BAAlert_ButtonActionBlock)actionBlock;

/*!  
* 视图消失  
*/  
\- (void)ba_alertHidden;

@end  

BAActionSheet.h

#import  
#import "BAAlert_Config.h"

@class BAActionSheet, BAActionSheetModel;

typedef void(^BAActionSheet_ConfigBlock)(BAActionSheet *tempView);  
typedef void (^BAActionSheet_ActionBlock)(NSIndexPath *indexPath,
BAActionSheetModel *model);


@interface BAActionSheet : UIView

/*! 是否开启边缘触摸隐藏 alert 默认:YES */  
@property (nonatomic, assign) BOOL isTouchEdgeHide;

/*! 是否开启进出场动画 默认:NO,如果 YES ,并且同步设置进出场动画枚举为默认值:1 */  
@property (nonatomic, assign, getter=isShowAnimate) BOOL showAnimate;

/*! 进出场动画枚举 默认:1 ,并且默认开启动画开关 */  
@property (nonatomic, assign) BAAlertAnimatingStyle animatingStyle;

/*! BAActionSheet 类型,默认:1 */  
@property (nonatomic, assign) BAActionSheetType actionSheetType;

@property (nonatomic, strong) NSArray *dataArray;  
@property (nonatomic, strong) NSString *title;

/*!  
*  
* @param configuration 属性配置:如 bgColor、buttonTitleColor、isTouchEdgeHide...  
* @param actionBlock block回调点击的选项  
*/  
\+
(void)ba_actionSheetShowWithConfiguration:(BAActionSheet_ConfigBlock)configuration  
actionBlock:(BAActionSheet_ActionBlock)actionBlock;

/*!  
* 隐藏 BAActionSheet  
*/  
\- (void)ba_actionSheetHidden;

@end

@class BAActionSheetSubContentModel;  
@interface BAActionSheetModel : NSObject

@property(nonatomic, copy) NSString *imageUrl;  
@property(nonatomic, copy) NSString *content;  
@property(nonatomic, copy) NSString *subContent;  
@property(nonatomic, strong) NSArray *subContentArray;

@end

@interface BAActionSheetSubContentModel : NSObject

@property(nonatomic, copy) NSString *subContent;

@end  

demo 示例

\- (void)actionSheet1  
{  
NSMutableArray *dataArray = [NSMutableArray array];  
NSArray *contentArray = @[@"微信支付", @"支付宝", @"预付款账户"];  
NSArray *subContentArray = @[@"", @"18588888888", @"余额:¥480.00"];  
NSArray *imageArray = @[@"123.png", @"背景.jpg", @"美女.jpg"];  

for (NSInteger i = 0; i < contentArray.count; i++)  
{  
BAActionSheetModel *model = [BAActionSheetModel new];  
model.imageUrl = imageArray[i];  
model.content = contentArray[i];  
model.subContent = subContentArray[i];  

[dataArray addObject:model];  
}  
BAKit_WeakSelf  
[BAActionSheet ba_actionSheetShowWithConfiguration:^(BAActionSheet *tempView)
{  

BAKit_StrongSelf  
tempView.title = @"支付方式";  
tempView.dataArray = dataArray;  
tempView.isTouchEdgeHide = NO;  
tempView.showAnimate = YES;  

self.actionSheet = tempView;  
} actionBlock:^(NSIndexPath *indexPath, BAActionSheetModel *model) {  
BAKit_ShowAlertWithMsg_ios8(model.content);  
}];  
}

\- (void)actionSheet2  
{  
NSMutableArray *dataArray = [NSMutableArray array];  
NSArray *contentArray = @[@"微信支付", @"支付宝", @"预付款账户"];

for (NSInteger i = 0; i < contentArray.count; i++)  
{  
BAActionSheetModel *model = [BAActionSheetModel new];  
// model.imageUrl = imageArray[i];  
model.content = contentArray[i];  
// model.subContent = subContentArray[i];  

[dataArray addObject:model];  
}  
BAKit_WeakSelf  
[BAActionSheet ba_actionSheetShowWithConfiguration:^(BAActionSheet *tempView)
{  

BAKit_StrongSelf  
// tempView.title = @"支付方式";  
tempView.dataArray = dataArray;  
tempView.actionSheetType = BAActionSheetTypeCustom;  
// tempView.isTouchEdgeHide = NO;  

self.actionSheet = tempView;  
} actionBlock:^(NSIndexPath *indexPath, BAActionSheetModel *model) {  
BAKit_ShowAlertWithMsg_ios8(model.content);  
}];  
}

\- (void)actionSheet3  
{  
NSArray *contentArray = @[@"微信支付", @"支付宝", @"预付款账户", @"中行"];  
NSArray *subContentArray = @[  
@[@"微信支付1", @"微信支付2", @"微信支付3"],  
@[@"支付宝1", @"支付宝2", @"支付宝3", @"支付宝4"],  
@[],  
@[@"中行1", @"中行2", @"中行3", @"中行4", @"中行5", @"中行6", @"中行7", @"中行2", @"中行3",
@"中行4", @"中行5", @"中行6", @"中行7", @"中行2", @"中行3", @"中行4", @"中行5", @"中行6",
@"中行7", @"中行2", @"中行3", @"中行4", @"中行5", @"中行6", @"中行7"]  
];  

NSMutableArray *dataArray = @[].mutableCopy;  
for (NSInteger i = 0; i < contentArray.count; i++)  
{  
BAActionSheetModel *model = [BAActionSheetModel new];  
model.content = contentArray[i];  

NSMutableArray *mutArray = @[].mutableCopy;  
for (NSInteger j = 0; j < subContentArray[i].count; j ++)  
{  
BAActionSheetSubContentModel *subContentModel = [BAActionSheetSubContentModel
new];  
subContentModel.subContent = subContentArray[i][j];  
[mutArray addObject:subContentModel];  
}  
model.subContentArray = mutArray;  

[dataArray addObject:model];  
}  

BAKit_WeakSelf  
[BAActionSheet ba_actionSheetShowWithConfiguration:^(BAActionSheet *tempView)
{  

BAKit_StrongSelf  
tempView.title = @"支付方式";  
tempView.dataArray = dataArray;  
tempView.actionSheetType = BAActionSheetTypeExpand;  
// tempView.isTouchEdgeHide = NO;  

self.actionSheet = tempView;  
} actionBlock:^(NSIndexPath *indexPath, BAActionSheetModel *model) {  
if (model.subContentArray.count > 0)  
{  
BAKit_ShowAlertWithMsg_ios8(model.subContentArray[indexPath.row].subContent);  
}  
else  
{  
BAKit_ShowAlertWithMsg_ios8(model.content);  
}  
}];  
}


\- (void)alert1  
{  
BAKit_WeakSelf  
/*! 第一种封装使用示例 */  
[BAAlert ba_alertShowWithTitle:title0 message:titleMsg0 image:nil
buttonTitleArray:@[@"取消",@"确定",@"确定2",@"确定3"] buttonTitleColorArray:@[[UIColor
redColor], [UIColor greenColor], [UIColor grayColor], [UIColor purpleColor]]
configuration:^(BAAlert *tempView) {  
BAKit_StrongSelf  
// temp.bgColor = [UIColor colorWithRed:0 green:1.0 blue:0 alpha:0.3];  
/*! 开启边缘触摸隐藏alertView */  
tempView.isTouchEdgeHide = YES;  
/*! 添加高斯模糊的样式 */  
tempView.blurEffectStyle = BAAlertBlurEffectStyleLight;  
/*! 开启动画 */  
tempView.showAnimate = YES;  
// /*! 进出场动画样式 默认为:1 */  
// tempView.animatingStyle = 1;  
self.alertView1 = tempView;  
} actionBlock:^(NSInteger index) {  
BAKit_StrongSelf  
[self.alertView1 ba_alertHidden];  
if (index == 1)  
{  
NSLog(@"点击了确定按钮!");  
ViewController2 *vc2 = [ViewController2 new];  
vc2.title = @"alert1";  
[self.navigationController pushViewController:vc2 animated:YES];  
}  
}];  
}

\- (void)alert2  
{  
// /*! 2、自定义按钮颜色 */  
BAKit_WeakSelf  
[BAAlert ba_alertShowWithTitle:@"温馨提示:" message:titleMsg2 image:nil
buttonTitleArray:@[@"取消", @"跳转VC2"] buttonTitleColorArray:@[[UIColor
redColor], [UIColor greenColor]] configuration:^(BAAlert *tempView) {  
BAKit_StrongSelf  
/*! 自定义按钮文字颜色 */  
// tempView.buttonTitleColor = [UIColor orangeColor];  
tempView.bgColor = [UIColor colorWithRed:1.0 green:1.0 blue:0 alpha:0.3];  
tempView.isTouchEdgeHide = YES;

/*! 是否开启进出场动画 默认:NO,如果 YES ,并且同步设置进出场动画枚举为默认值:1 */  
tempView.showAnimate = YES;  
tempView.animatingStyle = BAAlertAnimatingStyleShake;

self.alertView2 = tempView;

} actionBlock:^(NSInteger index) {  
BAKit_StrongSelf  
[self.alertView2 ba_alertHidden];  
if (index == 0)  
{  
NSLog(@"点击了取消按钮!");  
}  
else if (index == 1)  
{  
NSLog(@"点击了确定按钮!");  
ViewController2 *vc2 = [ViewController2 new];  
vc2.title = @"alert2";  
[self.navigationController pushViewController:vc2 animated:YES];  
}  
}];  
}

\- (void)alert3  
{  
/*! 3、自定义背景图片 */  
BAKit_WeakSelf  
[BAAlert ba_alertShowWithTitle:@"温馨提示:" message:titleMsg1 image:nil
buttonTitleArray:@[@"取消", @"确定"] buttonTitleColorArray:@[[UIColor redColor],
[UIColor greenColor]] configuration:^(BAAlert *tempView) {  
BAKit_StrongSelf  
/*! 自定义按钮文字颜色 */  
// tempView.buttonTitleColor = [UIColor orangeColor];  
/*! 自定义alert的背景图片 */  
tempView.bgImageName = @"背景.jpg";  
/*! 开启动画,并且设置动画样式,默认:1 */  
// tempView.showAnimate = YES;  

/*! 没有开启动画,直接进出场动画样式,默认开启动画 */  
tempView.animatingStyle = BAAlertAnimatingStyleFall;  

self.alertView3 = tempView;  
} actionBlock:^(NSInteger index) {  
BAKit_StrongSelf  
[self.alertView3 ba_alertHidden];  
if (index == 0)  
{  
NSLog(@"点击了取消按钮!");  
}  
else if (index == 1)  
{  
NSLog(@"点击了确定按钮!");  
ViewController2 *vc2 = [ViewController2 new];  
vc2.title = @"alert3";  
[self.navigationController pushViewController:vc2 animated:YES];  
}  
}];  
}

\- (void)alert4  
{  
/*! 4、内置图片和文字,可滑动查看 */  
BAKit_WeakSelf  
[BAAlert ba_alertShowWithTitle:@"温馨提示:" message:titleMsg1 image:[UIImage
imageNamed:@"美女.jpg"] buttonTitleArray:@[@"取消", @"跳转VC2"]
buttonTitleColorArray:@[[UIColor redColor], [UIColor greenColor]]
configuration:^(BAAlert *tempView) {  
BAKit_StrongSelf  
/*! 自定义按钮文字颜色 */  
// tempView.buttonTitleColor = [UIColor orangeColor];  
/*! 自定义alert的背景图片 */  
tempView.bgImageName = @"背景.jpg";  
/*! 是否显示动画效果 */  
tempView.showAnimate = YES;  
self.alertView4 = tempView;  
} actionBlock:^(NSInteger index) {  
BAKit_StrongSelf  
[self.alertView4 ba_alertHidden];  
if (index == 0)  
{  
NSLog(@"点击了取消按钮!");  
}  
else if (index == 1)  
{  
NSLog(@"点击了确定按钮!");  
ViewController2 *vc2 = [ViewController2 new];  
vc2.title = @"alert4";  
[self.navigationController pushViewController:vc2 animated:YES];  
}  
}];  
}

\- (void)alert5  
{  
/*! 5、完全自定义alert */  
_customView = [CustomView new];  
self.customView.frame = CGRectMake(50, SCREENHEIGHT - 300, SCREENWIDTH - 50 *
2, 162);

BAKit_WeakSelf  
[BAAlert ba_alertShowCustomView:self.customView configuration:^(BAAlert
*tempView) {  
BAKit_StrongSelf  
tempView.isTouchEdgeHide = YES;  
tempView.animatingStyle = BAAlertAnimatingStyleScale;  
self.alertView5 = tempView;  
}];  

self.customView.block = ^(NSInteger index) {  
BAKit_StrongSelf  
if (index == 1)  
{  
[self.alertView5 ba_alertHidden];  
}  
};  
}

其他示例可下载demo查看源码!  

5、更新记录:【倒叙】

欢迎使用 【BAHome】 系列开源代码 !
如有更多需求,请前往:【https://github.com/BAHome】

最新更新时间:2017-06-23 【倒叙】
最新Version:【Version:1.2.2】
更新内容:
1.2.2.1、优化部分宏定义

最新更新时间:2017-05-20 【倒叙】

最新Version:【Version:1.1.9】

更新内容:

1.1.9.1、修复动画过度白屏问题

最新更新时间:2017-05-15 【倒叙】

最新Version:【Version:1.1.8】

更新内容:

1.1.8.1、精简代码结构,删除多余或者重复代码

1.1.8.2、规范代码属性和方法命名,原有方法名和属性名有较大改动,忘见谅

1.1.8.3、重构 actionSheet,新增多种样式

最新更新时间:2017-05-13 【倒叙】

最新Version:【Version:1.1.7】

更新内容:

1.1.7.1、精简代码结构,删除多余或者重复代码

1.1.7.2、规范代码属性和方法命名,原有方法名和属性名有较大改动,忘见谅

1.1.7.3、优化部分动画

1.1.7.4、subView 布局优化

1.1.7.5、actionSheet 新增自定义文字颜色、title 字体颜色

最新更新时间:2017-05-10 【倒叙】

最新Version:【Version:1.1.5】

更新内容:

1.1.5.1、删除原有封装内部按钮点击事件中 ba_dismissAlertView 方法,此方法可在外部自由调用

最新更新时间:2017-05-09 【倒叙】

最新Version:【Version:1.1.4】

更新内容:

1.1.4.1、pod 更新xib 文件

最新更新时间:2017-05-08 【倒叙】
最新Version:【Version:1.1.0】
更新内容:
1.1.0.1、优化方法名命名规范
1.1.0.2、新增键盘内部处理
1.1.0.3、用原生 autoLayout 重构,自定义 alert 的布局再也不是问题了
1.1.0.4、优化代码结构,修复内在隐藏内存泄漏
1.1.0.5、新增 BAAlert_OC.h 文件,只需导入 BAAlert_OC.h 一个文件就可以使用 alert 和 actionSheet 了
1.1.0.6、删除了部分代码和属性,具体见源码 和 demo

6、bug 反馈

1、开发中遇到 bug,希望小伙伴儿们能够及时反馈与我们 BAHome 团队,我们必定会认真对待每一个问题!

2、以后提需求和 bug 的同学,记得把 git 或者博客链接给我们,我直接超链到你们那里!希望大家积极参与测试!

7、BAHome 团队成员

1、QQ 群
479663605

【注意:此群为 2 元 付费群,介意的小伙伴儿勿扰!】

孙博岩

QQ:137361770

git:https://github.com/boai

简书:http://www.jianshu.com/u/95c9800fdf47

微博:

马景丽

QQ:1253540493

git:https://github.com/MaJingli

陆晓峰

QQ:442171865

git:https://github.com/zeR0Lu

陈集

QQ:3161182978

git:https://github.com/chenjipdc

简书:http://www.jianshu.com/u/90ae559fc21d

任子丰

QQ:459643690

git:https://github.com/renzifeng

吴丰收

QQ:498121294

石少庸

QQ:363605775

git:https://github.com/CrazyCoderShi

简书:http://www.jianshu.com/u/0726f4d689a3

8、开发环境 和 支持版本

开发使用 最新版本 Xcode,理论上支持 iOS 8 及以上版本,如有版本适配问题,请及时反馈!多谢合作!

9、感谢

感谢 BAHome 团队成员倾力合作,后期会推出一系列 常用 UI 控件的封装,大家有需求得也可以在 issue 提出,如果合理,我们会尽快推出新版本!

BAHome 的发展离不开小伙伴儿的信任与推广,再次感谢各位小伙伴儿的支持!