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


相关推荐: Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  如何在IIS7上新建站点并设置安全权限?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  如何用景安虚拟主机手机版绑定域名建站?  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何在万网利用已有域名快速建站?  Laravel如何优化应用性能?(缓存和优化命令)  Python自动化办公教程_ExcelWordPDF批量处理案例  实例解析angularjs的filter过滤器  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何获取上海专业网站定制建站电话?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何在阿里云域名上完成建站全流程?  Laravel如何发送系统通知?(Notification渠道示例)  Android使用GridView实现日历的简单功能  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  香港服务器部署网站为何提示未备案?  独立制作一个网站多少钱,建立网站需要花多少钱?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Android 常见的图片加载框架详细介绍  如何获取PHP WAP自助建站系统源码?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  微信小程序 input输入框控件详解及实例(多种示例)  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  PythonWeb开发入门教程_Flask快速构建Web应用  高性能网站服务器部署指南:稳定运行与安全配置优化方案  如何在IIS7中新建站点?详细步骤解析  如何在云主机上快速搭建网站?  大型企业网站制作流程,做网站需要注册公司吗?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置