美文网首页iOS CodingiOS学习笔记程序员
iOS状态栏上显示提醒信息的定制

iOS状态栏上显示提醒信息的定制

作者: 踏歌寻方 | 来源:发表于2017-06-06 15:34 被阅读216次

    先看效果图

    Animation.gif

    实现这个效果,用到了JDStatusBarNotification,这是一个易于使用和定制的在状态栏上显示提醒信息的控件,可自定义颜色、字体以及动画,支持进度条展示,并可以显示活动指示器。

    假设这么一个场景,需要调接口修改个人资料,这时有3个状态,正在修改、修改成功、修改失败。我们可以写一个公共类,方便调用,譬如 NSObject+Common

    .h文件写方法

    #import <Foundation/Foundation.h>
    
    @interface NSObject (Common)
    
    - (void)showStatusBarQueryStr:(NSString *)tipStr;
    - (void)showStatusBarSuccessStr:(NSString *)tipStr;
    //此方法在实际开发中调用,调接口失败返回的error
    - (void)showStatusBarError:(NSError *)error;
    //...
    - (void)showStatusBarErrorStr:(NSString *)tipStr;
    
    @end
    

    .m文件实现方法

    #import "NSObject+Common.h"
    #import "JDStatusBarNotification.h"
    
    @implementation NSObject (Common)
    
    //error返回的tipStr
    - (NSString *)tipFromError:(NSError *)error {
        if (error && error.userInfo) {
            NSMutableString *tipStr = [[NSMutableString alloc] init];
            if ([error.userInfo objectForKey:@"msg"]) {
                NSArray *msgArray = [[error.userInfo objectForKey:@"msg"] allValues];
                NSUInteger num = [msgArray count];
                for (int i = 0; i < num; i++) {
                    NSString *msgStr = [msgArray objectAtIndex:i];
                    if (i+1 < num) {
                        [tipStr appendString:[NSString stringWithFormat:@"%@\n", msgStr]];
                    }else{
                        [tipStr appendString:msgStr];
                    }
                }
            }else{
                if ([error.userInfo objectForKey:@"NSLocalizedDescription"]) {
                    tipStr = [error.userInfo objectForKey:@"NSLocalizedDescription"];
                }else{
                    [tipStr appendFormat:@"ErrorCode%ld", (long)error.code];
                }
            }
            return tipStr;
        }
        return nil;
    }
    
    - (void)showStatusBarQueryStr:(NSString *)tipStr {
        [JDStatusBarNotification showWithStatus:tipStr styleName:JDStatusBarStyleSuccess];
        [JDStatusBarNotification showActivityIndicator:YES indicatorStyle:UIActivityIndicatorViewStyleWhite];
    }
    
    - (void)showStatusBarSuccessStr:(NSString *)tipStr {
        if ([JDStatusBarNotification isVisible]) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [JDStatusBarNotification showActivityIndicator:NO indicatorStyle:UIActivityIndicatorViewStyleWhite];
                [JDStatusBarNotification showWithStatus:tipStr dismissAfter:1.5 styleName:JDStatusBarStyleSuccess];
            });
        }else{
            [JDStatusBarNotification showActivityIndicator:NO indicatorStyle:UIActivityIndicatorViewStyleWhite];
            [JDStatusBarNotification showWithStatus:tipStr dismissAfter:1.0 styleName:JDStatusBarStyleSuccess];
        }
    }
    
    - (void)showStatusBarError:(NSError *)error {
        if ([JDStatusBarNotification isVisible]) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [JDStatusBarNotification showActivityIndicator:NO indicatorStyle:UIActivityIndicatorViewStyleWhite];
                [JDStatusBarNotification showWithStatus:[self tipFromError:error] dismissAfter:1.5 styleName:JDStatusBarStyleError];
            });
        }else{
            [JDStatusBarNotification showActivityIndicator:NO indicatorStyle:UIActivityIndicatorViewStyleWhite];
            [JDStatusBarNotification showWithStatus:[self tipFromError:error] dismissAfter:1.5 styleName:JDStatusBarStyleError];
        }
    }
    
    - (void)showStatusBarErrorStr:(NSString *)tipStr {
        if ([JDStatusBarNotification isVisible]) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [JDStatusBarNotification showActivityIndicator:NO indicatorStyle:UIActivityIndicatorViewStyleWhite];
                [JDStatusBarNotification showWithStatus:tipStr dismissAfter:1.5 styleName:JDStatusBarStyleError];
            });
        }else{
            [JDStatusBarNotification showActivityIndicator:NO indicatorStyle:UIActivityIndicatorViewStyleWhite];
            [JDStatusBarNotification showWithStatus:tipStr dismissAfter:1.5 styleName:JDStatusBarStyleError];
        }
    }
    

    调用方法

    [self showStatusBarQueryStr:@"正在修改个人信息"];
    
    [self showStatusBarSuccessStr:@"个人信息修改成功"];
    
    //[self showStatusBarError:error];
    [self showStatusBarErrorStr:@"修改失败"];
    

    谢谢百忙之中的你看到这,如果这能帮到你,我深感荣幸!如果你们有更好的控件,希望不吝赐教,大家一起学习,一起进步。

    我的微信.jpg

    相关文章

      网友评论

        本文标题:iOS状态栏上显示提醒信息的定制

        本文链接:https://www.haomeiwen.com/subject/vkngfxtx.html