MJSnackBar 1.0.2

MJSnackBar 1.0.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2017年3月
SwiftSwift 版本3.0
SPM支持 SPM

Maintained by MaximeJunger.



  • 作者
  • Maxime Junger

MJSnackBar

MJSnackBar 是一个纯 Swift 实现的 Android SnackBar,非常适合显示简短信息并允许用户对其执行操作。它会在设置的时间后自动消失。

MJSnackBar demo

示例项目

附带示例项目演示了 MJSnackBar。它是一个包含小小待办事项列表的 UITableView。当你删除一项时,MJSnackBar 将会展示一个按钮,允许用户撤销该操作。

用法

预配置方式

当实例化 MJSnackBar 时,你必须传递一个参数,即它将要显示的视图。

 let snackBar = MJSnackBar(onView: self.view)

配置

它是 UIView 的一个子类,所以你可以自由地改变同样的属性,例如 backgroundColor 等。

但是,还有一些 MJSnackBar 属性你可以修改。

    /// Animation duration
    public var animationDuration: Double = 0.4

    /// How long the SnackBar will be shown
    public var timeSnackBarShown: Double = 2.0

    /// SnackBar height
    public var snackBarDefaultHeight: CGFloat = 48.0

    /// Allow the SnackBar height to automatically adjust
    /// its height based on the content
    public var allowHeightChange: Bool = true

    /// SnackBar margins
    public var spaceBetweenElements: CGFloat = 24.0

    /// SnackBar side margins to view
    public var sideMargins: CGFloat = 0.0

    /// SnackBar bottom margin to view
    public var bottomMargin: CGFloat = 0.0

    /// SnackBar internal content margin
    public var elementsTopBottomMargins: CGFloat = 14.0

    /// Font of displayed message
    public var messageFont: UIFont? = nil

    /// Font of action button
    public var actionFont: UIFont? = UIFont.boldSystemFont(ofSize: UIFont.labelFontSize)

    /// Message text color
    public var messageColor: UIColor = .white

    /// Action text color
    public var actionColorColor: UIColor = .red

数据

要显示 MJSnackBar,你必须创建一个 MJSnackBarData 实例并调用一个特定的方法

  let data = MJSnackBarData(withIdentifier: indexPath.row, message: msg, andActionMessage: "UNDO", objectSaved: dataArray[indexPath.row])

  snackbar.show(data: data, onView: self.view)

当向用户展示信息时,你通常会在其后执行某个操作。为了帮助你处理不同的事件,MJSnackBarData 提供了多个字段

  • identifier(可选):Int,有助于识别数据。
  • message:String,将要显示的消息。
  • actionMessage(可选):String,将要显示的操作消息。
  • objectSaved(可选):Any,受数据影响的对象。你可以通过类型转换来检索它。

处理事件

为了能够处理不同的事件,你必须实现与 MJSnackBarDelegate 相关的 3 个方法。它们会在 MJSnackBar 显示、隐藏,或用户在其上执行操作时通知你。

为了告诉 bar 你的类可以处理其事件

  snackbar.delegate = self
extension ViewController: MJSnackBarDelegate {

    func snackBarDisappeared(with data: MJSnackBarData, reason: MJSnackBar.EndShowingType) {
        print("👻 SnackBar disappeared \(data.message) - Reason : \(reason)")
    }

    func snackBarAppeared(with data: MJSnackBarData) {
        print("⭐ SnackBar appeared \(data.message)")
    }

    func snackBarActionTriggered(with data: MJSnackBarData) {

        print("👆 SnackBar touched \(data.message)")

        if let id = data.id {

            let indexPath = IndexPath(row: id, section: 0)

            if let originalData = data.originalObject as? String {
                self.dataArray.insert(originalData, at: id)
            }

            self.examplTableView.insertRows(at: [indexPath], with: .automatic)
        }
    }
}

贡献

请随意fork此项目,或者给它一个⭐。