在Android中具有确认提示框与短暂提示框Toast,但在iOS中只有确认提示框Alert并无类似于Android的短暂提示框Toast,若需要可自己写一个,博主自己写了一个已上传至github,下载请点击
注:使用此组件控制器需加入到UINavigationController中
使用方法:
[[[ZFToast alloc] init] popUpToastWithMessage:@"提示内容"];
源码:
ZFToast.h文件
/**
* @file
* @author 张凡
* @date 2016/3/25
*/
#import <UIKit/UIKit.h>
/**
* @class ZFToast
* @brief Toast弹窗控件
* @author 张凡
* @date 2016/3/25
*/
/**
* @使用方法
* [[[ZFToast alloc] init] popUpToastWithMessage:@"提示内容"];
*/
@interface ZFToast : UIView
/// @brief 文本提示框
- (void)popUpToastWithMessage:(NSString *)message;
@end</span><span style="color:#cc0000;">
</span>
ZFToast.m文件
import "ZFToast.h"
@interface ZFToast ()
/// @brief 存放文本的UILabel
@property (strong,nonatomic) UILabel *textLabel;
@property (strong,nonatomic) ZFToast *toast;
@property (strong,nonatomic) NSTimer *timer;
/// @brief 记录是否移除
@property (assign,nonatomic) NSInteger currentDate;
@end
@implementation ZFToast
- (instancetype)init
{
self = [super init];
if (self) {
self.currentDate = 0;
}
return self;
}
- (void)popUpToastWithMessage:(NSString *)message
{
/// @brief 创建定时器
[self createTimer];
/// @brief 初始化Label
[self initLabel:message];
/// @brief 初始化底层视图
[self initBottomView];
}
#pragma mark - 创建定时器
- (void)createTimer
{
self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
//暂停定时器
[self.timer setFireDate:[NSDate distantFuture]];
}
#pragma mark - 初始化Label
- (void)initLabel:(NSString *)message
{
//获取屏幕宽度
CGFloat screenWidth = CGRectGetWidth([[UIScreen mainScreen] bounds]);
//获取屏幕高度
CGFloat screenHeight = CGRectGetHeight([[UIScreen mainScreen] bounds]);
/// @brief Label的字号
UIFont *font = [UIFont systemFontOfSize:15];
/// @brief 控件的宽
CGFloat width = screenWidth / 3.0 * 2.0;
/// @brief Label所需的宽高
CGSize labelSize = [self calculationTextNeedSize:message andFont:15 andWidth:width];
self.textLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, labelSize.width, labelSize.height)];
self.textLabel.backgroundColor = [UIColor clearColor];
self.textLabel.textColor = [UIColor colorWithRed:29.0/255.0 green:29.0/255.0 blue:29.0/255.0 alpha:1];
self.textLabel.font = font;
self.textLabel.text = message;
self.textLabel.numberOfLines = 0;
self.textLabel.textAlignment = NSTextAlignmentCenter;
}
#pragma mark - 初始化底层视图
- (void)initBottomView
{
//获取屏幕宽度
CGFloat screenWidth = CGRectGetWidth([[UIScreen mainScreen] bounds]);
//获取屏幕高度
CGFloat screenHeight = CGRectGetHeight([[UIScreen mainScreen] bounds]);
self.backgroundColor = [UIColor colorWithRed:204.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:0.8];
self.frame = CGRectMake((screenWidth - self.textLabel.frame.size.width)/2.0, screenHeight/3.0 * 2.0 + screenHeight/3.0/2.0, self.textLabel.frame.size.width + 20, self.textLabel.frame.size.height + 20);
[self addSubview:self.textLabel];
//设置ImageView是否可以设为圆角
self.layer.masksToBounds = YES;
//设置圆角度数
self.layer.cornerRadius = 10;
UIViewController *vc = [self getCurrentVC];
[vc.view addSubview:self];
//启动定时器
[self.timer setFireDate:[NSDate distantPast]];
}
#pragma mark - 取到当前控制器
- (UIViewController *)getCurrentVC
{
UIViewController *result = nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
if (window.windowLevel != UIWindowLevelNormal)
{
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow * tmpWin in windows)
{
if (tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
UIView *frontView = [[window subviews] objectAtIndex:0];
id nextResponder = [frontView nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]])
result = nextResponder;
else
result = window.rootViewController;
return result;
}
- (void)onTimer
{
self.currentDate++;
if (self.currentDate == 2) {
//暂停定时器
[self.timer setFireDate:[NSDate distantFuture]];
[self removeFromSuperview];
self.currentDate = 0;
}
}
#pragma mark - 计算文本所需大小
- (CGSize)calculationTextNeedSize:(NSString *)text andFont:(CGFloat)font andWidth:(CGFloat)width
{
CGSize labelSize = [text sizeWithFont: [UIFont boldSystemFontOfSize:font]
constrainedToSize: CGSizeMake(width, MAXFLOAT )
lineBreakMode: UILineBreakModeWordWrap];
return labelSize;
}
@end
如有不明白的地方欢迎咨询:
QQ:294491256
Telephone:13390517636