Sam Stone, [email protected]
Snackbar 是 Android UI 组件,可以向用户展示时尚的操作提示。谷歌也在其一些 iOS 应用中使用他们自己的 iOS Snackbar 实现,例如 Gmail。
Snackbar 有助于向用户显示简短的信息,然后用户可以采取行动。常见的使用模式是在用户执行某些破坏性操作后显示 Snackbar,为用户提供一段宽限期,在宽限期之内,用户可以撤销该操作。
这个用例在 iOS Google Gmail 应用中得到了演示:[查看 Gmail 实现](https://camo.githubusercontent.com/3a17919e0ea41d69c9eb6e1d10fbd95ff2aac336/687474703a2f2f692e696d6775722e636f6d2f786e6c516775512e676966)。
以下是此项目实现的 Snackbar 的演示:[查看 SSSnackbar 实现](https://camo.githubusercontent.com/94ffcc0ce91da9f3bb4e16baf2a962c63be90920/687474703a2f2f692e696d6775722e636f6d2f39764a38474f4f2e676966)。
提供的示例项目提供了 SSSnackbar 的演示。它显示一个包含购物清单的 tableView。当从购物清单中删除项目时,会显示一个 Snackbar,允许用户撤销该删除。
购物清单分为两部分
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
。
此项目可通过 CocoaPods 获取。为了安装,请在 Podfile 中添加 "SSSnackbar"
。
您还可以通过下载 SSSnumentar.h 和 SSSnumentar.m 并将它们添加到您的项目中手动集成 SSSnumentar。
此项目包含一个类:SSSnackbar
。
SSSnackbar
对象不能在屏幕上“堆叠”。如果在屏幕上已经显示了一个Snackbar,再显示另一个,当前的Snackbar将被替换,并且它将表现得好像已经按照配置的长度时间显示后已被取消。
发送给 SSSnackbar
对象的所有消息都应该从主线程发送。
SSSnackbar
实例。可以使用以下方法创建新的Snackbar对象
- (instancetype)initWithMessage:(NSString *)message
actionText:(NSString *)actionText
duration:(NSTimeInterval)duration
actionBlock:(void (^)(SSSnackbar *sender))actionBlock
dismissalBlock:(void (^)(SSSnackbar *sender))dismissalBlock
+ (instancetype)snackbarWithMessage:(NSString *)message
actionText:(NSString *)actionText
duration:(NSTimeInterval)duration
actionBlock:(void (^)(SSSnackbar *sender))actionBlock
dismissalBlock:(void (^)(SSSnackbar *sender))dismissalBlock
message
是要在Snackbar的文本标签上显示的文本。actionText
是用作Snackbar按钮标题的文本。duration
是Snackbar应在屏幕上保持显示的时长。actionBlock
是当用户按下Snackbar按钮时调用的代码块。除非配置了Snackbar对象,否则此代码块将在主线程上执行。dismissalBlock
是当从屏幕删除Snackbar时调用的代码块,而没有按下其动作按钮。这可以用来完成用户已经执行的操作,因为这时用户的撤销更改时间已经结束了。SSSnackbar
实例。使用初始化方法设置的属性可以在对象创建后更改,但在Snackbar在屏幕上显示后不应更改。
默认情况下,actionBlock
在主线程执行。如果代码块将花费很长时间执行,则可以通过将Snackbar的 actionIsLongRunning
属性设置为 YES
来在后台线程上运行。
在这种情况下,代码块将在后台线程执行,并使用 UIActivityIndicatorView
替换Snackbar的动作按钮。
SSSnackbar
实例给用户。创建和配置后,可以通过发送 show
消息来将Snackbar对象显示在屏幕上。
SSSnackbar
实例。Snackbar对象会在保持屏幕上显示的时长后自动消失,或者如果用户按下Snackbar按钮并且Snackbar的动作代码块已执行完毕。
有时需要手动取消一个Snackbar对象。这可以通过向对象发送 dismiss
或 dismissAnimated:(BOOL)animated
消息来完成。