Android 有原生的 SnackBar ,iOS 没有与之相似的原生控件,GitHub 上好像也没有找到特别好用的开源库,于是自己写了一个模仿系统原生通知样式的易于定制的 NoticeBoard

NoticeBoard 的功能定位是应用内消息控件,相对于系统通知,它显而易见的优点是:简单易用可定制性强,相对于原生的 UIAlertController 和开源的 MBProgressHUD ,它的优点是专为这种特定场景而生:只需要告诉用户发生了什么,不必立即处理,或者可以稍后再处理

演示如何使用

强烈建议感兴趣的朋友亲自下载 源码 运行 Example项目,因为项目中提供了大量的演示程序,通过这些演示你可以清楚地了解到使用方法及其效果。

导入 NoticeBoard

如果要在工程项目中使用NoticeBoard,需要在 Podfile 中添加这一行:

pod 'NoticeBoard'

快速 post 示例

最简单的,你可以直接发送一条 "Hello World!" :

NoticeBoard.post("Hello World!")

用户可以像移除系统原生通知那样拖拽一条通知往上方移动丢出屏幕外,如果你希望消息自动消失,需要传入消息的持续时间:

NoticeBoard.post("Hello World!", duration: 2)

或者直接发出一条警告消息:

NoticeBoard.post(.warning, title: "电量过低", message: "电量不足10%,请及时给设备充电。", duration: 10)

标准 post 步骤

// 创建notice
let notice = Notice.init(title: "标题", icon: UIImage.init(named: "alert-"), body: "正文")
// 设置notice
...
// 发布notice
NoticeBoard.shared.post(notice, duration: 2)

设置notice

// 按钮事件
notice.actionButtonDidTapped { (notice, btn) inprint("点击了'→'按钮")
}// 设置颜色主题
notice.themeColor = .init(red: 0.2, green: 0.3, blue: 0.4, alpha: 1)
// 模糊背景(暂时只支持iOS11,在之前的系统会自动改为纯色背景),和纯色背景可以同时使用
notice.blurEffectStyle = .light

还有更多设置,例如:警示(alert)、禁止被用户通过手势移除、设置正文最大高度等,详见 文档 。

移除通知

// 移除某个通知
NoticeBoard.shared.remove(notice)
// 清空
NoticeBoard.shared.clean()

自定义 view

NoticeBoard 开源库提供了极大的自由度,你可以只享受 NoticeBoard 提供的对 Notice 管理策略(post、remove、手势、过渡动画),而不使用现有的 Notice 的默认 UI,做法就是创建一个空白的 Notice 实例,添加自定义的视图。

let notice = Notice()
notice.rootViewController?.view.addSubview(myView)
NoticeBoard.post(notice)

根据这一特性,你可以继承 Notice ,重写初始化方法, 从而创建符合公司内部 UI 要求的 Notice 。

源码和文档链接

这一篇是简化版,还有更多功能,详见 博客原文 。

如果你已经下载了 项目源码 并且开始使用了,请搭配阅读 开发文档 。

如果你觉得我的工具有用,烦请前往 GitHub 点个赞以支持。目前的 Star 个数是:

NoticeBoard 一个仿原生UI的消息通知控件相关推荐

  1. [UWP]实现一个轻量级的应用内消息通知控件

    [UWP]实现一个轻量级的应用内消息通知控件 原文:[UWP]实现一个轻量级的应用内消息通知控件 在UWP应用开发中,我们常常有向用户发送一些提示性消息的需求.这种时候我们一般会选择MessageDi ...

  2. 使用Angular可重用Component思路实现一个自带图标(icon)的input控件

    参考链接:Angular ng-content and Content Projection: A Complete Guide - How To Use ng-content To Improve ...

  3. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础-手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  4. Qt QWidget实现消息提示控件TipsWidget

    前言 用Qt实现一个消息提示控件,控件宽度会根据显示的内容多少来动态伸展,控件显示三秒钟过后会自动渐变透明度然后最终消失,这有点类似于Android的Toast控件,都是用于消息短暂提示. 源码 头文 ...

  5. 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题

    原文 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题 虽然微软宣称 Windows 10 将是最后一个 Windows 版本,但由于年代跨越 ...

  6. 打造原生的图文混排控件

    随着互联网的发展,信息展示的元素越来越丰富,无论是PC端,还是移动端,图文混排已经成为一种通用的信息展示方式,但在各个平台却都没有提供这种原生的控件.为了更方便地在开发中展示丰富的文本信息,便自定义了 ...

  7. 【Android】App首页上下滚动快报控件 通知控件 类似京东快报控件(一)

    前言 快过年了,对于大伙来说手头上的事情做完没有呢,马上也该让自己轻松一阵子了,哈哈哈.好,说正事,由于公司App这个版本首页的改版,新增了很多新的控件,类似于京东快报这种控件的话我在写之前也去找了一 ...

  8. 一个抓取电脑屏幕的小控件台程序

    一个抓取电脑屏幕的小控件台程序 using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  9. pyqt控件显示重叠_Python编程:一个不错的基于PyQt的Led控件显示库,建议收藏学习...

    1.控件说明 在Github上,偶然发现了一个基于PyQt5的第三方Led指示灯控件库,使用起来非常方便,控件外观也比较漂亮,更难能可贵的是作者源代码写得比较简洁,仅仅才约200行左右,可以作为一个在 ...

最新文章

  1. ANSI编码和标准代码页(code page)
  2. python Logging日志记录模块详解
  3. 如何让 Timer 在特定时间点触发?
  4. MongoDB 复制集和分片的理解
  5. 视频解码芯片SAA7111A的初始化
  6. 拜登重安全,白宫埋彩蛋:Coder,我们需要帮助!
  7. 安装opcenccv-python以后仍然No module named ‘cv2‘
  8. 游戏编程和计算机编程一样吗,学数控编程和电脑编程区别是什么?
  9. Excel·VBA破解密码
  10. krohne流量计接线图_电磁流量计接线方式
  11. WordPress系列教程(二)----WordPress基本使用和常用设置
  12. 发票专用驱动sjz_收藏!增值税发票(发票勾选)选择确认平台使用手册
  13. [区块链]区块链技术在殡葬行业的思考
  14. 2022最新性能测试面试题(带答案)
  15. 黑科技之机器人外骨骼
  16. TDS协议和FreeTDS开源实现
  17. 关于widedeep的再思考
  18. 金蝶云星空与管易云系统对接案例
  19. 02- web UI测试与UI Check List
  20. 计算机机房ups供电时间多少,弱电机房UPS电源的选择及电池容量的计算方法

热门文章

  1. VB 打开文件夹,并选中指定的文件
  2. Jedis问题解决方案大全:No more cluster attempts left
  3. GitHub五万星中文资源:命令行技巧大合集,新老司机各取所需
  4. MIT博士小姐姐的机器学习入门教程开课!碎片时间服用,每周一更 | 资源
  5. 激光雷达厂商速腾聚创获3亿元融资,阿里菜鸟、上汽,北汽入股
  6. 汤晓鸥为CNN搓了一颗大力丸
  7. 从没见过干净图片,英伟达AI就学会了去噪大法 | ICML论文
  8. 霍金这次想帮AI说点好话,后来没忍住……
  9. Can't save in background: fork: Cannot allocate memory
  10. U盘加载硬盘控制卡驱动安装Windows 2003 指南