iOS开发 提示框UIAlertController的略微封装
2016-08-29 14:07
423 查看
之前写的代码,把UIAlertView的封装剔除之后,发现UIAlertController 封装的意义不是很大了,毕竟苹果公司封装的已经够好了,好了,上代码
.m里
用法:
// 通常的alert
[[XSDAlertViewTools shareInstance] showAlert:@"提示"
message:@"这个就是提示的内容了"
cancelTitle:@"取消"
titleArray:@[@"确定"]
viewController:nil
confirm:^(NSInteger buttonTag) {
// cancel按钮的index(buttonTag)是-1 cancelIndex
NSLog(@"点击按钮的buttonTag===%ld==",(long)buttonTag);
}];
如图:alert 和sheet
比较low,大家凑合着看吧...其中的sheet的用法,和上面的alert一样;
// // XSDAlertViewTools.h // XSDSH 提示框工具类 // // Created by 小广 on 16/1/11. // Copyright © 2016年 XSD. All rights reserved. // #import <Foundation/Foundation.h> #define cancelIndex (-1) typedef void(^AlertViewBlock)(NSInteger buttonTag); @interface XSDAlertViewTools : NSObject + (XSDAlertViewTools *)shareInstance; /** * 创建提示框 * * @param title 标题 * @param message 提示内容 * @param cancelTitle 取消按钮(无操作,为nil则只显示一个按钮) * @param titleArray 标题字符串数组(为nil,默认为"确定") * @param vc VC iOS8及其以后会用到 * @param confirm 点击按钮的回调(取消按钮的Index是cancelIndex -1) */ - (void)showAlert:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle titleArray:(NSArray *)titleArray viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm; /** * 创建提示框(可变参数版) * * @param title 标题 * @param message 提示内容 * @param cancelTitle 取消按钮(无操作,为nil则只显示一个按钮) * @param vc VC iOS8及其以后会用到 * @param confirm 点击按钮的回调(取消按钮的Index是cancelIndex -1) * @param buttonTitles 按钮(为nil,默认为"确定",传参数时必须以nil结尾,否则会崩溃) */ - (void)showAlert:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm buttonTitles:(NSString *)buttonTitles, ... NS_REQUIRES_NIL_TERMINATION; /** * 创建菜单(Sheet) * * @param title 标题 * @param message 提示内容 * @param cancelTitle 取消按钮(无操作,为nil则只显示一个按钮) * @param titleArray 标题字符串数组(为nil,默认为"确定") * @param vc VC iOS8及其以后会用到 * @param confirm 点击确认按钮的回调(取消按钮的Index是cancelIndex -1) */ - (void)showSheet:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle titleArray:(NSArray *)titleArray viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm; /** * 创建菜单(Sheet 可变参数版) * * @param title 标题 * @param message 提示内容 * @param cancelTitle 取消按钮(无操作,为nil则只显示一个按钮) * @param vc VC * @param confirm 点击按钮的回调(取消按钮的Index是cancelIndex -1) * @param buttonTitles 按钮(为nil,默认为"确定",传参数时必须以nil结尾,否则会崩溃) */ - (void)showSheet:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm buttonTitles:(NSString *)buttonTitles, ... NS_REQUIRES_NIL_TERMINATION ; @end
.m里
// // XSDAlertViewTools.m // XSDSH 提示框工具类 // // Created by 小广 on 16/1/11. // Copyright © 2016年 XSD. All rights reserved. // #import "XSDAlertViewTools.h" #define RootVC [[UIApplication sharedApplication] keyWindow].rootViewController @interface XSDAlertViewTools () @property (nonatomic, copy) AlertViewBlock block; @end @implementation XSDAlertViewTools #pragma mark - 对外方法 + (XSDAlertViewTools *)shareInstance { static XSDAlertViewTools *tools = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ tools = [[self alloc] init]; }); return tools; } /** * 创建提示框 * * @param title 标题 * @param message 提示内容 * @param cancelTitle 取消按钮(无操作,为nil则只显示一个按钮) * @param titleArray 标题字符串数组(为nil,默认为"确定") * @param vc VC * @param confirm 点击确认按钮的回调 */ - (void)showAlert:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle titleArray:(NSArray *)titleArray viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm { // if (!vc) vc = RootVC; [self p_showAlertController:title message:message cancelTitle:cancelTitle titleArray:titleArray viewController:vc confirm:^(NSInteger buttonTag) { if (confirm)confirm(buttonTag); }]; } /** * 创建提示框(可变参数版) * * @param title 标题 * @param message 提示内容 * @param cancelTitle 取消按钮(无操作,为nil则只显示一个按钮) * @param vc VC * @param confirm 点击按钮的回调 * @param buttonTitles 按钮(为nil,默认为"确定",传参数时必须以nil结尾,否则会崩溃) */ - (void)showAlert:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm buttonTitles:(NSString *)buttonTitles, ... NS_REQUIRES_NIL_TERMINATION { // 读取可变参数里面的titles数组 NSMutableArray *titleArray = [[NSMutableArray alloc] initWithCapacity:0]; va_list list; if(buttonTitles) { //1.取得第一个参数的值(即是buttonTitles) [titleArray addObject:buttonTitles]; //2.从第2个参数开始,依此取得所有参数的值 NSString *otherTitle; va_start(list, buttonTitles); while ((otherTitle = va_arg(list, NSString*))) { [titleArray addObject:otherTitle]; } va_end(list); } if (!vc) vc = RootVC; [self p_showAlertController:title message:message cancelTitle:cancelTitle titleArray:titleArray viewController:vc confirm:^(NSInteger buttonTag) { if (confirm)confirm(buttonTag); }]; } /** * 创建菜单(Sheet) * * @param title 标题 * @param message 提示内容 * @param cancelTitle 取消按钮(无操作,为nil则只显示一个按钮) * @param titleArray 标题字符串数组(为nil,默认为"确定") * @param vc VC * @param confirm 点击确认按钮的回调 */ - (void)showSheet:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle titleArray:(NSArray *)titleArray viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm { if (!vc) vc = RootVC; [self p_showSheetAlertController:title message:message cancelTitle:cancelTitle titleArray:titleArray viewController:vc confirm:^(NSInteger buttonTag) { if (confirm)confirm(buttonTag); }]; } /** * 创建菜单(Sheet 可变参数版) * * @param title 标题 * @param message 提示内容 * @param cancelTitle 取消按钮(无操作,为nil则只显示一个按钮) * @param vc VC iOS8及其以后会用到 * @param confirm 点击按钮的回调 * @param buttonTitles 按钮(为nil,默认为"确定",传参数时必须以nil结尾,否则会崩溃) */ - (void)showSheet:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm buttonTitles:(NSString *)buttonTitles, ... NS_REQUIRES_NIL_TERMINATION { // 读取可变参数里面的titles数组 NSMutableArray *titleArray = [[NSMutableArray alloc] initWithCapacity:0]; va_list list; if(buttonTitles) { //1.取得第一个参数的值(即是buttonTitles) [titleArray addObject:buttonTitles]; //2.从第2个参数开始,依此取得所有参数的值 NSString *otherTitle; va_start(list, buttonTitles); while ((otherTitle= va_arg(list, NSString*))) { [titleArray addObject:otherTitle]; } va_end(list); } if (!vc) vc = RootVC; // 显示菜单提示框 [self p_showSheetAlertController:title message:message cancelTitle:cancelTitle titleArray:titleArray viewController:vc confirm:^(NSInteger buttonTag) { if (confirm)confirm(buttonTag); }]; } #pragma mark - ----------------内部方法------------------ //UIAlertController(iOS8及其以后) - (void)p_showAlertController:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle titleArray:(NSArray *)titleArray viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm { UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; // 下面两行代码 是修改 title颜色和字体的代码 // NSAttributedString *attributedMessage = [[NSAttributedString alloc] initWithString:title attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17.0f], NSForegroundColorAttributeName:UIColorFrom16RGB(0x334455)}]; // [alert setValue:attributedMessage forKey:@"attributedTitle"]; if (cancelTitle) { // 取消 UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { if (confirm)confirm(cancelIndex); }]; [alert addAction:cancelAction]; } // 确定操作 if (!titleArray || titleArray.count == 0) { UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { if (confirm)confirm(0); }]; [alert addAction:confirmAction]; } else { for (NSInteger i = 0; i<titleArray.count; i++) { UIAlertAction *action = [UIAlertAction actionWithTitle:titleArray[i] style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { if (confirm)confirm(i); }]; // [action setValue:UIColorFrom16RGB(0x00AE08) forKey:@"titleTextColor"]; // 此代码 可以修改按钮颜色 [alert addAction:action]; } } [vc presentViewController:alert animated:YES completion:nil]; } // ActionSheet的封装 - (void)p_showSheetAlertController:(NSString *)title message:(NSString *)message cancelTitle:(NSString *)cancelTitle titleArray:(NSArray *)titleArray viewController:(UIViewController *)vc confirm:(AlertViewBlock)confirm { UIAlertController *sheet = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleActionSheet]; if (!cancelTitle) cancelTitle = @"取消"; // 取消 UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { if (confirm)confirm(cancelIndex); }]; [sheet addAction:cancelAction]; if (titleArray.count > 0) { for (NSInteger i = 0; i<titleArray.count; i++) { UIAlertAction *action = [UIAlertAction actionWithTitle:titleArray[i] style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { if (confirm)confirm(i); }]; [sheet addAction:action]; } } [vc presentViewController:sheet animated:YES completion:nil]; } @end
用法:
// 通常的alert
[[XSDAlertViewTools shareInstance] showAlert:@"提示"
message:@"这个就是提示的内容了"
cancelTitle:@"取消"
titleArray:@[@"确定"]
viewController:nil
confirm:^(NSInteger buttonTag) {
// cancel按钮的index(buttonTag)是-1 cancelIndex
NSLog(@"点击按钮的buttonTag===%ld==",(long)buttonTag);
}];
// 带有可变参数的alert [[XSDAlertViewTools shareInstance] showAlert:@"提示" message:@"这个就是提示的内容了" cancelTitle:@"取消" viewController:self confirm:^(NSInteger buttonTag) { // cancel按钮的index(buttonTag)是-1 cancelIndex NSLog(@"点击按钮的buttonTag===%ld==",(long)buttonTag); } buttonTitles:@"呼叫",@"查看",@"我就看看", nil];
如图:alert 和sheet
比较low,大家凑合着看吧...其中的sheet的用法,和上面的alert一样;
相关文章推荐
- iOS开发之自己封装的提示框(警告框)样式BHAlertView
- iOS开发之自己封装的提示框(警告框)样式BHAlertView
- iOS开发架构封装异步请求案例实现
- [iOS开发高效第三方库之]sqlite3封装库---FMDB
- iOS开发——post异步网络请求封装
- 【iOS开发-50】利用创建新的类实现代码封装,从而不知不觉实践一个简单的MVC实验,附带个动画
- iOS开发 封装网络请求 ——实例
- [iOS开发高效第三方库之]sqlite3封装库---FMDB
- IOS开发---OC语言-⑥封装(set、get)
- iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
- iOS带有勾选框的提示框(封装代码)
- [iOS开发高效第三方库之]sqlite3封装库---FMDB
- iOS开发中对于NSURLRequest的封装
- Xcode 5.0 下载,安装,使用 & iOS开发 -应用管理使用 xib及mvc封装
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
- iOS开发架构封装异步请求案例实现
- 在iOS开发中调用本地plist文件并封装为NSDictionary字典类型
- [iOS开发高效第三方库之]sqlite3封装库---FMDB
- ios开发——详解sqlite数据库,封装数据库操作