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

发布时间 - 2026-01-11 01:48:28    点击率:

先看效果图


实现这个效果,用到了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:@"修改失败"];

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# ios状态栏  # ios  # 显示状态栏  # 显示提示信息  # iOS 自定义状态栏和导航栏详细介绍  # 详解在iOS App中自定义和隐藏状态栏的方法  # iOS实现点击状态栏自动回到顶部效果详解  # iOS 隐藏导航条和状态栏实现方法  # 图文讲解如何解决App的iOS 7顶部状态栏适配问题  # iOS 设置状态栏的背景颜色方法  # 深入理解iOS的状态栏  # IOS点击按钮隐藏状态栏详解及实例代码  # IOS 开发状态栏隐藏的实现办法  # iOS状态栏、导航栏的一些笔记分享  # 个人信息  # 我们可以  # 这是一个  # 自定义  # 这篇文章  # 谢谢大家  # 先看  # 进度条  # 栏上  # 在实际  # 有疑问  # NSString  # tipStr  # showStatusBarQueryStr  # Foundation  # gt  # interface  # void  # userInfo  # error 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 手机软键盘弹出时影响布局的解决方法  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  如何在建站之星绑定自定义域名?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  使用C语言编写圣诞表白程序  如何自定义建站之星网站的导航菜单样式?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  网站图片在线制作软件,怎么在图片上做链接?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Laravel如何配置任务调度?(Cron Job示例)  nodejs redis 发布订阅机制封装实现方法及实例代码  html如何与html链接_实现多个HTML页面互相链接【互相】  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Laravel如何处理异常和错误?(Handler示例)  微信小程序 require机制详解及实例代码  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何在云服务器上快速搭建个人网站?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  高端建站如何打造兼具美学与转化的品牌官网?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  无锡营销型网站制作公司,无锡网选车牌流程?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  魔方云NAT建站如何实现端口转发?  如何在万网自助建站平台快速创建网站?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  创业网站制作流程,创业网站可靠吗?  javascript中闭包概念与用法深入理解  JS中对数组元素进行增删改移的方法总结  简历没回改:利用AI润色让你的文字更专业  进行网站优化必须要坚持的四大原则  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel如何实现一对一模型关联?(Eloquent示例)  如何实现javascript表单验证_正则表达式有哪些实用技巧  Bootstrap整体框架之JavaScript插件架构  太平洋网站制作公司,网络用语太平洋是什么意思?  利用vue写todolist单页应用  php打包exe后无法访问网络共享_共享权限设置方法【教程】  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  iOS UIView常见属性方法小结  如何用AWS免费套餐快速搭建高效网站?  Laravel如何使用Service Container和依赖注入?(代码示例)