TTGSnackbar shows simple message and action button on the bottom or top of the screen with multi kinds of animation, which is written in Swift3 and inspired by Snackbar in Android. It also support showing custom view, icon image or multi action button.
A Swift based implementation of the Android Snackbar for iOS
TTGSnackbar is useful for showing a brief message at bottom or top of the screen with one or two action buttons.
It appears above all other elements on screen.
It disappears after a timeout or after user click the action button.
Version 1.9.0+
Xcode 9+
iOS 8+
Version 1.6.0
Xcode 9
iOS 8+
Version 1.5.3
Xcode 8
iOS 8+
You can use CocoaPods to install TTGSnackbar
by adding it to your Podfile
:
pod "TTGSnackbar"
You can use Carthage to install TTGSnackbar
by adding it to your Cartfile
:
github "zekunyan/TTGSnackbar"
And you need to import the module.
import TTGSnackbar
let snackbar = TTGSnackbar(message: "TTGSnackbar !", duration: .short)
snackbar.show()
let snackbar = TTGSnackbar(
message: "TTGSnackBar !",
duration: .middle,
actionText: "Action!",
actionBlock: { (snackbar) in
print("Click action!")
}
)
snackbar.show()
let snackbar = TTGSnackbar(
message: "TTGSnackbar !",
duration: .forever,
actionText: "Action",
actionBlock: { (snackbar) in
print("Click action!")
// Dismiss manually after 3 seconds
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(3 * Double(NSEC_PER_SEC))) / Doubl(NSEC_PER_SEC)) {
snackbar.dismiss()
}
}
)
snackbar.show()
let snackbar = TTGSnackbar(message: "Two actions !", duration: .long)
// Action 1
snackbar.actionText = "Yes"
snackbar.actionTextColor = UIColor.green
snackbar.actionBlock = { (snackbar) in NSLog("Click Yes !") }
// Action 2
snackbar.secondActionText = "No"
snackbar.secondActionTextColor = UIColor.yellow
snackbar.secondActionBlock = { (snackbar) in NSLog("Click No !") }
snackbar.show()
let snackbar = TTGSnackbar(message: "TTGSnackbar !", duration: .long)
// Add icon image
snackbar.icon = UIImage(named: "emoji_cool_small")
snackbar.show()
// Instantiate the custom content view
let customContentView = UINib(nibName: "CustomView", bundle:Bundle.main).instantiate(withOwner: nil, options: nil).first as! UIView?
// Initialize the snackbar with the custom content view
let snackbar = TTGSnackbar(customContentView: customContentView, duration: .long)
snackbar.show()
let snackbar = TTGSnackbar(message: "TTGSnackbar !", duration: .long)
// Add icon image
snackbar.icon = UIImage(named: "emoji_cool_small")
// Add the gesture recognizer callbacks
ssnackbar.onTapBlock = { snackbar in
snackbar.dismiss()
}
snackbar.onSwipeBlock = { (snackbar, direction) in
// Change the animation type to simulate being dismissed in that direction
if direction == .right {
snackbar.animationType = .slideFromLeftToRight
} else if direction == .left {
snackbar.animationType = .slideFromRightToLeft
} else if direction == .up {
snackbar.animationType = .slideFromTopBackToTop
} else if direction == .down {
snackbar.animationType = .slideFromTopBackToTop
}
snackbar.dismiss()
}
snackbar.show()
TTGSnackbarManager
can handle automatically showing and replacing the presented Snackbars at your screen.
Swift
let snackbar = TTGSnackbar(message: "TTGSnackbar !", duration: .long)
TTGSnackbarManager.show(snackbar)
Objective-c
TTGSnackbar *bar = [[TTGSnackbar alloc] initWithMessage:@"Bar1" duration:TTGSnackbarDurationMiddle];
[bar setDismissBlock:^(TTGSnackbar * snackBar) {
//whatever you want for dismiss
}];
[[TTGSnackbarManager shared] showSnackbar: bar];
TTGSnackbarManager
uses the dismissBlock
property of a snackbar, it does not replace any functionality that you add to the snackbar, rather it just adds its own code to the existing block.
message: String
defines the message to display. Supports multi line text. Supports updating on the fly.
messageTextColor: UIColor
defines the message text color.
messageTextFont: UIFont
defines the message text font.
duration: TTGSnackbarDuration
defines the display duration.
TTGSnackbarDuration
: short
, middle
, long
and forever
.
When you set forever
, the snackbar will show an activity indicator after user click the action button and you must dismiss the snackbar manually.
actionText: String
defines the action button title.
actionTextColor: UIColor
defines the action button title color.
actionTextFont: UIFont
defines the action button title font.
actionMaxWidth: CGFloat
defines the action button max width. Min is 44.
actionTextNumberOfLines: Int
defines the number of lines of action button title. Default is 1.
actionBlock: TTGActionBlock?
will be called when user clicks the action button.
// TTGActionBlock definition.
public typealias TTGActionBlock = (snackbar: TTGSnackbar) -> Void
secondActionText: String
secondActionTextColor: UIColor
secondActionTextFont: UIFont
secondActionBlock: TTGActionBlock?
snackbarMaxWidth: CGFloat
will set the max width of the snackbar if on larger devices you don not want it full width. Default is -1 which is denotes full-width.
dismissBlock: TTGDismissBlock?
will be called when snackbar dismiss automatically or when user click action button to dismiss the snackbar.
// TTGDismissBlock definition.
public typealias TTGDismissBlock = (snackbar: TTGSnackbar) -> Void
onTapBlock: TTGActionBlock
will be called when the user taps the snackbar.
// TTGActionBlock definition.
public typealias TTGActionBlock = (snackbar: TTGSnackbar) -> Void
onSwipeBlock: TTGSwipeBlock
will be called when the user swipes on the snackbar
/// Swipe gesture callback closure
public typealias TTGSwipeBlock = (_ snackbar: TTGSnackbar, _ direction: UISwipeGestureRecognizerDirection) -> Void
shouldDismissOnSwipe: Bool
will determine if the snackbar will automatically be dismissed when it’s swiped
/// A property to make the snackbar auto dismiss on Swipe Gesture
public var shouldDismissOnSwipe: Bool = false
animationType: TTGSnackbarAnimationType
defines the style of snackbar when it show and dismiss.
TTGSnackbarAnimationType
: fadeInFadeOut
, slideFromBottomToTop
, slideFromBottomBackToBottom
, slideFromLeftToRight
, slideFromRightToLeft
, slideFromTopToBottom
and slideFromTopBackToTop
.
The default value of animationType
is slideFromBottomBackToBottom
, which is the same as Snackbar in Android.
animationDuration: NSTimeInterval
defines the duration of show and hide animation.
leftMargin: CGFloat
, rightMargin: CGFloat
, topMargin: CGFloat
and bottomMargin: CGFloat
defines the margins of snackbar
shouldActivateLeftAndRightMarginOnCustomContentView: Bool
will activate the left and right margins if using a customContentView
/// a property to enable left and right margin when using customContentView
public var shouldActivateLeftAndRightMarginOnCustomContentView: Bool = false
contentInset: UIEdgeInsets
defines the padding(content inset) of content in the snackbar. Default is UIEdgeInsets.init(top: 0, left: 4, bottom: 0, right: 4)
.
cornerRadius: CGFloat
defines the corner radius of snackbar.
icon: UIImage
defines the icon image.
iconContentMode: UIViewContentMode
defines the content mode of icon imageView.
containerView: UIView
defines the custom container(super) view for snackbar to show.
customContentView: UIView?
defines the custom content view to show in the snackbar.
separateViewBackgroundColor: UIColor = UIColor.gray
defines the separator line color.
activityIndicatorViewStyle: UIActivityIndicatorViewStyle
defines the activityIndicatorViewStyle in snackbar.
activityIndicatorViewColor: UIColor
defines the activityIndicatorView color in snackbar.
animationSpringWithDamping: CGFloat
defines the spring animation damping value. Default is 0.7.
animationInitialSpringVelocity: CGFloat
defines the spring animation initial velocity. Default is 5.