ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MaterialKit MKSnackbar实战:单个文件实现Snackbar提示栏+自动排队显示,附Delegate事件全流程

MaterialKit MKSnackbar实战:单个文件实现Snackbar提示栏+自动排队显示,附Delegate事件全流程 MaterialKit MKSnackbar实战单个文件实现Snackbar提示栏自动排队显示附Delegate事件全流程【免费下载链接】MaterialKitMaterial design components for iOS written in Swift项目地址: https://gitcode.com/gh_mirrors/ma/MaterialKitMaterialKit是一款用 Swift 编写的 iOS Material Design 组件库其中的MKSnackbar组件仅凭单个文件 MKSnackbar.swift 就实现了完整的 Snackbar 底部提示栏默认 3.5 秒自动消失、底部滑入滑出动画、先进先出自动排队显示、动作按钮与 Delegate 事件回调。本文带你完整掌握 MKSnackbar 的快速上手方法、排队机制原理和 Delegate 事件全流程新手也能轻松上手。一个文件搞定MKSnackbar 的代码结构 Material Design 中 Snackbar 是位于屏幕底部的轻量提示条比 Alert 更不打扰用户。MaterialKit 把它的完整实现压缩在约 400 行代码里包含三个部分组成部分源码位置职责MKSnackbar主类MKSnackbar.swift#L11提示栏本体文字、动作按钮、显示/消失动画MKSnackbarDelegate协议MKSnackbar.swift#L362-L366显示、消失、动作点击三类事件回调MKSnackbarManager管理器MKSnackbar.swift#L370-L412全局单例负责 Snackbar 的自动排队调度这种主类 协议 调度器的单文件组织方式读一遍就能吃透非常适合新手学习 Snackbar 的设计思路。MKSnackbar 快速上手两种方式显示提示栏方式一使用完整初始化器推荐官方示例工程 ViewController.swift#L29-L37 中就是这样调用的let snackbar MKSnackbar( withTitle: You clicked on CardView, withDuration: nil, withTitleColor: nil, withActionButtonTitle: Done, withActionButtonColor: UIColor.MKColor.Red.P100) snackbar.show()五个参数的含义定义见 MKSnackbar.swift#L71-L86参数传nil时的默认值说明withTitle—提示文字支持多行withDuration3.5 秒自动消失倒计时见 MKSnackbar.swift#L48withTitleColor白色文字颜色withActionButtonTitle无按钮动作按钮标题withActionButtonColor白色动作按钮文字颜色方式二先建实例再按需配置如果只需要简单提示也可以创建空实例后逐项设置属性再调用show()见 MKSnackbar.swift#L127-L129let snackbar MKSnackbar(frame: .zero) snackbar.text 保存成功 snackbar.actionTitle 撤销 snackbar.duration 5 snackbar.show()常用可配置属性一览text、actionTitle、textColor、actionTitleColor、actionRippleColor动作按钮涟漪色、duration、只读状态isShowing。提示栏本身默认黑色背景动画时长固定 0.25 秒。自动排队显示原理MKSnackbarManager 队列机制 连续触发多条提示时提示栏会不会叠在屏幕上一团糟不会。show()并不会直接显示而是把任务交给全局单例MKSnackbarManager调度逻辑在 MKSnackbar.swift#L387-L400队列为空新提示直接显示已有提示在显示新提示入队并立即调用当前提示的dismiss()提前退场旧提示滑出动画结束管理器在自己的snackbabrDismissed回调中把队首移出队列并显示见 MKSnackbar.swift#L402-L411。效果就是先进先出、同一时间屏幕最多只有一条、新请求会插队打断当前提示。业务代码里高频弹提示完全不用自己防抖管理器天然保证了 UI 不重叠。Delegate 事件全流程从显示到消失MKSnackbarDelegate定义于 MKSnackbar.swift#L362-L336三个方法均为 optional事件方法触发时机snackbarShown(snackbar:)滑入动画完成开始自动消失倒计时MKSnackbar.swift#L336actionClicked(snackbar:)用户点击动作按钮按钮随即被禁用防重复点击再触发 dismissMKSnackbar.swift#L189-L195snackbabrDismissed(snackbar:)滑出动画完成视图从窗口移除MKSnackbar.swift#L158-L168完整事件链路show()→ 管理器入队调度 → 0.25s 滑入动画 →snackbarShown→ 倒计时duration秒 → 超时或点击动作按钮点击时先触发actionClicked并dismiss()→ 0.25s 滑出动画 →snackbabrDismissed→ 视图移除注册与注销回调class MyViewController: UIViewController, MKSnackbarDelegate { func snackbarShown(snackbar: MKSnackbar) { /* 可在此统计曝光 */ } func actionClicked(snackbar: MKSnackbar) { /* 执行业务动作 */ } func snackbabrDismissed(snackbar: MKSnackbar) { /* 清理资源 */ } } // 注册 snackbar.addDeleagte(self) // 页面退出前记得注销 snackbar.removeDelegate(self)两个容易踩坑的拼写源码中消失回调叫snackbabrDismissedsnackbar 少写了一个k、注册方法叫addDeleagtedelegate 少了个t。实现协议和注册时务必与源码拼写完全一致事件才能收到。如果想让动作按钮走自己的 target-action 而不是 Delegate可以用actionButtonSelector(withTarget:andAction:)MKSnackbar.swift#L181-L185直接给按钮绑定回调方法。安装与集成 通过 CocoaPods 安装版本声明见 MaterialKit.podspecpod MaterialKit, ~ 0.4运行环境要求见 README.mdiOS 8.0Xcode 6.1⚠️ 两点提醒该库已停止维护README 顶部有明确标注适合学习与轻量项目使用源码为早期 Swift 2 语法如forState: .Normal、UIColor.blackColor()直接拷入新项目时需要对语法做现代化适配。常见问题速答问能同时显示多条 Snackbar 吗不能。MKSnackbarManager的队列机制保证同一时间屏幕上只有一条这是自动排队的核心设计。问快速连续 show 会怎样后一条会打断当前这条提前退场队列按先进先出依次显示不会重叠也不会丢失顺序。问设置了 Delegate 但收不到事件优先检查方法签名是否与源码拼写完全一致尤其是snackbabrDismissed以及是否用addDeleagte正确注册了。【免费下载链接】MaterialKitMaterial design components for iOS written in Swift项目地址: https://gitcode.com/gh_mirrors/ma/MaterialKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表