简单的自定义AlertView
来源:互联网 发布:蓝牙软件下载 编辑:程序博客网 时间:2024/05/17 01:59
UIAlertView 在iOS9.0正式被废弃了, 而UIAlertController只有在iOS8.0才能支持, 做项目时不想就这样简单的一个提示还老是再对系统做判断, 所以就自己仿造UIAlertView自定义了一个ZHZAlertView类
并使用block来进行回调
先看效果
- 接口部分
typedef void(^ConfirmBlock)();typedef void(^CancelBlock)();@interface ZHZAlertView : UIView/** * 自定义初始化 alertView提示框 * * @param title 标题 * @param message 信息 * @param confirmStr 确认按钮 * @param cancelStr 取消按钮 * @param confirm 点击确认后操作 * @param cancel 点击取消按钮后操作 * */- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message confirmAction:(NSString *)confirmStr cancelAction:(NSString *)cancelStr confirmBlock:(ConfirmBlock)confirm cancelBlock:(ConfirmBlock)cancel;/** * 便利构造器 */+ (instancetype)alertViewWithTitle:(NSString *)title message:(NSString *)message confirmAction:(NSString *)confirmStr cancelAction:(NSString *)cancelStr confirmBlock:(ConfirmBlock)confirm cancelBlock:(ConfirmBlock)cancel;/** * 加载并显示视图 */- (void)show;@end
2 . 实现部分
#import "ZHZAlertView.h"#define kMargin ([UIScreen mainScreen].bounds.size.width / 9.0)#define kAlertViewPadding 10#define kScreenW [UIScreen mainScreen].bounds.size.width#define kScreenH [UIScreen mainScreen].bounds.size.height@interface ZHZAlertView ()@property (nonatomic, strong)ConfirmBlock confirmBlock;@property (nonatomic, strong)CancelBlock cancelBlock;///蒙版@property (nonatomic, strong)UIView *backView;///自定义显示的alertView@property (nonatomic, strong)UIView *customAlertView;///标题label@property (nonatomic, strong)UILabel *titleLabel;///信息label@property (nonatomic, strong)UILabel *messageLabel;///点击的按钮segement@property (nonatomic, strong)UISegmentedControl *segemtedControl;///需要提示的当前view, 作为ZHZView的对象的父视图@property (nonatomic, strong)UIView *supView;///标题string@property (nonatomic, strong)NSString *title;///信息string@property (nonatomic, strong)NSString *message;///确认按钮string@property (nonatomic, strong)NSString *confirmStr;///取消按钮string@property (nonatomic, strong)NSString *cancelStr;@end@implementation ZHZAlertView//自定义初始化- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message confirmAction:(NSString *)confirmStr cancelAction:(NSString *)cancelStr confirmBlock:(ConfirmBlock)confirm cancelBlock:(ConfirmBlock)cancel { if (self = [super init]) { _title = title; _message = message; _confirmStr = confirmStr; _cancelStr = cancelStr; _confirmBlock = confirm; _cancelBlock = cancel; _supView = [UIApplication sharedApplication].keyWindow; } return self;}//构造便利构造器+ (instancetype)alertViewWithTitle:(NSString *)title message:(NSString *)message confirmAction:(NSString *)confirmStr cancelAction:(NSString *)cancelStr confirmBlock:(ConfirmBlock)confirm cancelBlock:(ConfirmBlock)cancel { return [[ZHZAlertView alloc] initWithTitle:title message:message confirmAction:confirmStr cancelAction:cancelStr confirmBlock:confirm cancelBlock:cancel];}//显示视图- (void)show { //0. 首先把自己添加到 [UIApplication sharedApplication].keyWindow 上 self.frame = self.supView.frame; [self.supView addSubview:self]; //1. 蒙版 self.backView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.backView.backgroundColor = [UIColor colorWithWhite:0.000 alpha:0.414]; [self addSubview:self.backView]; //2. 显示的 alertView self.customAlertView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenW - kMargin*3, kScreenH - kMargin *8)]; self.customAlertView.center = self.center; self.customAlertView.backgroundColor = [UIColor whiteColor]; [self.backView addSubview:self.customAlertView]; self.customAlertView.layer.cornerRadius = 6; self.customAlertView.layer.masksToBounds = YES; //2.0 自定义 `提示框` 上的控件 CGFloat customW = CGRectGetWidth(self.customAlertView.frame); [self.title drawInRect:CGRectMake(0, 0, kScreenW - kMargin*3, kScreenH - kMargin *8) withAttributes:nil]; //2.1 标题 title self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, kAlertViewPadding, customW, 20)]; self.titleLabel.textAlignment = NSTextAlignmentCenter; self.titleLabel.text = self.title; [self.customAlertView addSubview:self.titleLabel]; CGSize size = CGSizeMake(customW - kAlertViewPadding*2, 0); NSDictionary *dict = @{ NSFontAttributeName: [UIFont systemFontOfSize:15] }; CGRect frame = [self.message boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:dict context:nil]; //2.2 信息 message CGFloat messageY = CGRectGetMaxY(self.titleLabel.frame) + kAlertViewPadding; self.messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(kAlertViewPadding, messageY, customW - kAlertViewPadding*2, frame.size.height > 20 ? frame.size.height : 20)]; self.messageLabel.textAlignment = NSTextAlignmentCenter; self.messageLabel.font = [UIFont systemFontOfSize:13]; self.messageLabel.text = self.message; self.messageLabel.numberOfLines = 0; [self.customAlertView addSubview:self.messageLabel]; //2.3 确定 和 取消按钮 CGFloat separatorY = CGRectGetMaxY(self.messageLabel.frame) + kAlertViewPadding*2; self.segemtedControl = [[UISegmentedControl alloc] initWithItems:@[self.cancelStr, self.confirmStr]]; self.segemtedControl.tintColor = [UIColor grayColor]; self.segemtedControl.frame = CGRectMake(-2, separatorY, customW + 4, 45); //设置字体属性 NSDictionary *normalDict = @{ NSFontAttributeName: [UIFont systemFontOfSize:14], NSForegroundColorAttributeName: [UIColor blackColor], }; //设置正常状态 [self.segemtedControl setTitleTextAttributes:normalDict forState:UIControlStateNormal]; [self.segemtedControl addTarget:self action:@selector(segmentSelect:) forControlEvents:UIControlEventValueChanged]; [self.customAlertView addSubview:self.segemtedControl]; CGFloat selfH = CGRectGetMaxY(self.segemtedControl.frame); CGRect frame1 = self.customAlertView.frame; frame1.size.height = selfH - 2; self.customAlertView.frame = frame1; //3. 动画显示 [UIView animateWithDuration:0.2 animations:^{ self.customAlertView.center = CGPointMake(self.backView.center.x, self.backView.center.y); }];}#pragma mark - action- (void)segmentSelect:(UISegmentedControl *)segment { [UIView animateWithDuration:0.1 animations:^{ self.backView.backgroundColor = [UIColor clearColor]; self.customAlertView.center = self.center; } completion:^(BOOL finished) { [self removeFromSuperview]; }]; switch (segment.selectedSegmentIndex) { case 0: self.cancelBlock(); break; case 1: self.confirmBlock(); break; default: break; }}
3 . 调用
ZHZAlertView *view = [ZHZAlertView alertViewWithTitle:@"标题" message:@"一直想学PHP\n一直想学H5\n一直想学PYTHON" confirmAction:@"确定" cancelAction:@"取消" confirmBlock:^{ NSLog(@"确定00000"); } cancelBlock:^{ NSLog(@"取消1111"); }]; [view show];
4 . 一些说明:
首先自定义的这个提示框很简单, 并且扩展性很差, 主要用于二选一的场景;
以后根据项目中的需求 肯定会慢慢完善的;
不过有了这个思路, 再进行扩展就很easy了.
1 0
- 简单的自定义AlertView
- alertView的简单封装
- 兼容iOs7的自定义alertView
- 兼容iOs7的自定义alertView
- 自定义AlertView
- 自定义AlertView
- 自定义AlertView
- 自定义alertview
- 自定义alertview
- 自定义alertView
- 自定义AlertView
- 自定义alertView
- 关于自定义AlertView背景的方法收集
- 关于自定义AlertView背景的方法收集
- 关于自定义AlertView背景的方法收集
- 根据nib文件布局的自定义AlertView
- 关于自定义AlertView背景的方法收集
- 关于自定义AlertView背景的方法收集
- python numpy教程
- Git服务器的搭建, 以及Android studio 上克隆git 服务器上的项目
- hdu1054Strategic Game【树型的dp】
- 【跟我学spring 4.0 】之第四节-自动装配
- 【NVIDIA Jetson TK1】三,TK1开发板运行opencv光流程序,光流代码
- 简单的自定义AlertView
- NYOJ 24 素数距离问题
- 表格展开和收缩,表格折叠
- PAT (Basic Level)1004. 成绩排名
- 操作系统文件系统练习题
- 多态知识总结 转自郝斌老师
- 编程苦手 Pixhawk 受难录 二: CMake 教程翻译(1-3)
- 自动化管理工具Saltstack之Pillar篇(11)
- android项目结构说明