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) in
print("點擊了'→'按鈕")
}
// 設置顏色主題
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 個數是: