码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 提示 toast

时间:2015-08-11 18:50:19      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:ios   toast   提示   

iOS 中经常会遇到这样的情况,比如网络连接错误,需要弹出一段文字提示,稍后自动关闭

比如登陆成功提示登陆完成,稍后关闭

如图

技术分享



具体实现如下,我们创建一个单例,后续使用只需要复制代码就行

创建一个类起名 MyAlertCenter  控制提示信息的现实与关闭

同时,创建内部类 MyAlert 继承UIView 现实提示内容


具体代码如下

.h文件


#import <UIKit/UIKit.h>

@interface MyAlert : UIView

-(id)init;
- (void) setMessageText:(NSString *)message;
@end



@interface MyAlertCenter : NSObject{
    
    MyAlert *myAlertView;//alertView
    BOOL active;//当前是否在用
    
    
}

+ (MyAlertCenter *) defaultCenter;//单例 生成alert控制器
- (void) postAlertWithMessage:(NSString*)message;//弹出文字

@end


.m文件

#import "MyAlertCenter.h"


@implementation MyAlertCenter

+ (MyAlertCenter *) defaultCenter{
    static MyAlertCenter *defaultCenter;
    if (!defaultCenter) {
        defaultCenter=[[MyAlertCenter alloc]init];
    }
    return defaultCenter;
}

- (id) init{
    if(!(self=[super init])) return nil;
    
    myAlertView = [[MyAlert alloc] init];
    myAlertView.alpha = 0.0f;
    active = NO;
    
    [[UIApplication sharedApplication].keyWindow addSubview:myAlertView];
    
    return self;
}

- (void) postAlertWithMessage:(NSString*)message{
    //判断当前是否在使用中
    if (!active) {
        [self showAlerts:message];
    }
}

- (void) showAlerts:(NSString *) str {
    
    //开始使用,设置当前为使用状态
    active = YES;
    myAlertView.alpha = 0;
    [[UIApplication sharedApplication].keyWindow addSubview:myAlertView];
    [myAlertView setMessageText:str];
    myAlertView.center = [UIApplication sharedApplication].keyWindow.center;
    
    //设置动画
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.2];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationStep2)];
    myAlertView.alpha = 0.8;
    [UIView commitAnimations];
}

- (void) animationStep2{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDelay:1.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationStep3)];
    myAlertView.alpha = 0;
    [UIView commitAnimations];
}


- (void) animationStep3{
    
    [myAlertView removeFromSuperview];
    active=NO;
    
}
@end




@implementation MyAlert

CGRect messageRect;
NSString *text;

-(id)init{
    
    self=[super initWithFrame:CGRectMake(0, 0, 100, 10)];
    if (self) {
        messageRect =CGRectInset(self.bounds, 10, 10);
    }
    return self;
}
-(void)setMessageText:(NSString *)message{
    
    text=message;
    NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:14]};
    
    CGSize s=[text boundingRectWithSize:CGSizeMake(100, 0) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attribute context:nil].size;
    
    self.bounds = CGRectMake(0, 0, s.width+40, s.height+15+15);
    
    messageRect.size = s;
    messageRect.size.height += 5;
    messageRect.origin.x = 20;
    messageRect.origin.y = 15;
    
    [self setNeedsLayout];
    [self setNeedsDisplay];
}

-(void)drawRect:(CGRect)rect
{
    NSDictionary* attrs =@{NSForegroundColorAttributeName:[UIColor whiteColor]
                           ,NSFontAttributeName:[UIFont fontWithName:@"AmericanTypewriter" size:18]
                           };
    [text drawInRect:messageRect withAttributes:attrs]; //给文本限制个矩形边界,防止矩形拉伸;
}


@end


好了,MyAlertCenter 类 实现完成了。


如果需要使用的话 我们直接这样调用 即可

    [[MyAlertCenter defaultCenter] postAlertWithMessage:@"登陆成功"];

比较简单吧


如果说我们需要调整提示内容现实的时间

可以找

- (void) animationStep2{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDelay:1.0]; //显示时间
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationStep3)];
    myAlertView.alpha = 0;
    [UIView commitAnimations];
}

第二行代码调整


如果要调整 提示显示的位置(示例中默认现实在屏幕最中间)

可以找


    myAlertView.center = [UIApplication sharedApplication].keyWindow.center; //设置位置

重新给 myAlertView.center 赋值即可



苹果开发群 :414319235  欢迎加入  欢迎讨论问题




版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS 提示 toast

标签:ios   toast   提示   

原文地址:http://blog.csdn.net/lwjok2007/article/details/47422093

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!