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: TTGSnackbarDurationdefines 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.