关于iOS中类似于Android的Toast短暂提示框

在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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值