🎄 DZNEmptyDataSet implement with Swift.A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display. DZNEmptyDataSet with Swift.
A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display. DZNEmptyDataSet with Swift.
pod 'EmptyDataSet-Swift', '~> 5.0.0'
github "Xiaoye220/EmptyDataSet-Swift" "4.2.0"
Same as DZNEmptyDataSet
import EmptyDataSet_Swift
class OriginalUsageViewController: UITableViewController, EmptyDataSetSource, EmptyDataSetDelegate {
override func viewDidLoad() {
super.viewDidLoad()
tableView.emptyDataSetSource = self
tableView.emptyDataSetDelegate = self
}
}
public protocol EmptyDataSetDelegate: class {
/// Asks the delegate to know if the empty dataset should fade in when displayed. Default is true.
func emptyDataSetShouldFadeIn(_ scrollView: UIScrollView) -> Bool
/// Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is false.
func emptyDataSetShouldBeForcedToDisplay(_ scrollView: UIScrollView) -> Bool
/// Asks the delegate to know if the empty dataset should be rendered and displayed. Default is true.
func emptyDataSetShouldDisplay(_ scrollView: UIScrollView) -> Bool
/// Asks the delegate for touch permission. Default is true.
func emptyDataSetShouldAllowTouch(_ scrollView: UIScrollView) -> Bool
/// Asks the delegate for scroll permission. Default is false.
func emptyDataSetShouldAllowScroll(_ scrollView: UIScrollView) -> Bool
/// Asks the delegate for image view animation permission. Default is false.
/// Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
func emptyDataSetShouldAnimateImageView(_ scrollView: UIScrollView) -> Bool
/// Tells the delegate that the empty dataset view was tapped.
/// Use this method either to resignFirstResponder of a textfield or searchBar.
func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView)
/// Tells the delegate that the action button was tapped.
func emptyDataSet(_ scrollView: UIScrollView, didTapButton button: UIButton)
/// Tells the delegate that the empty data set will appear.
func emptyDataSetWillAppear(_ scrollView: UIScrollView)
/// Tells the delegate that the empty data set did appear.
func emptyDataSetDidAppear(_ scrollView: UIScrollView)
/// Tells the delegate that the empty data set will disappear.
func emptyDataSetWillDisappear(_ scrollView: UIScrollView)
/// Tells the delegate that the empty data set did disappear.
func emptyDataSetDidDisappear(_ scrollView: UIScrollView)
}
public protocol EmptyDataSetSource: class {
/// Asks the data source for the title of the dataset.
/// The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString?
/// Asks the data source for the description of the dataset.
/// The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
func description(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString?
/// Asks the data source for the image of the dataset.
func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage?
/// Asks the data source for a tint color of the image dataset. Default is nil.
func imagetintColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor?
/// Asks the data source for the image animation of the dataset.
func imageAnimation(forEmptyDataSet scrollView: UIScrollView) -> CAAnimation?
/// Asks the data source for the title to be used for the specified button state.
/// The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString?
/// Asks the data source for the image to be used for the specified button state.
/// This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
func buttonImage(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> UIImage?
/// Asks the data source for a background image to be used for the specified button state.
/// There is no default style for this call.
func buttonBackgroundImage(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> UIImage?
/// Asks the data source for the background color of the dataset. Default is clear color.
func backgroundColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor?
/// Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
/// Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
/// Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
func customView(forEmptyDataSet scrollView: UIScrollView) -> UIView?
/// Asks the data source for a offset for vertical alignment of the content. Default is 0.
func verticalOffset(forEmptyDataSet scrollView: UIScrollView) -> CGFloat
/// Asks the data source for a vertical space between elements. Default is 11 pts.
func spaceHeight(forEmptyDataSet scrollView: UIScrollView) -> CGFloat
}
Usage without conform to datasource and/or delegate.Tableview just calls the following method.
public func emptyDataSetView(_ closure: @escaping (EmptyDataSetView) -> Void)
Example:
tableView.emptyDataSetView { view in
view.titleLabelString(titleString)
.detailLabelString(detailString)
.image(image)
.imageAnimation(imageAnimation)
.buttonTitle(buttonTitle, for: .normal)
.buttonTitle(buttonTitle, for: .highlighted)
.buttonBackgroundImage(buttonBackgroundImage, for: .normal)
.buttonBackgroundImage(buttonBackgroundImage, for: .highlighted)
.dataSetBackgroundColor(backgroundColor)
.verticalOffset(verticalOffset)
.verticalSpace(spaceHeight)
.shouldDisplay(true, view: tableView)
.shouldFadeIn(true)
.isTouchAllowed(true)
.isScrollAllowed(true)
.isImageViewAnimateAllowed(isLoading)
.didTapDataButton {
// Do something
}
.didTapContentView {
// Do something
}
}
Set customView by using EmptyDataSetSource, other setting will be invalid.Set customView by using Extensions, other autolayout will be invalid.
Rule for displaying CustomView
func verticalOffset(forEmptyDataSet scrollView: UIScrollView) -> CGFloat
Example:
func customView(forEmptyDataSet scrollView: UIScrollView) -> UIView? {
let view = CustomView(frame: CGRect(x: 0, y: 0, width: 150, height: 150))
return view
}
tableView.emptyDataSetView { [weak self] view in
view.customView(CustomView(frame: CGRect(x: 0, y: 0, width: 150, height: 150)))
}
above code will show as follows
func customView(forEmptyDataSet scrollView: UIScrollView) -> UIView? {
let view = CustomView(frame: CGRect(x: 0, y: 0, width: 150, height: 150))
return view
}
func verticalOffset(forEmptyDataSet scrollView: UIScrollView) -> CGFloat {
return 200
}
tableView.emptyDataSetView { [weak self] view in
view.customView(CustomView(frame: CGRect(x: 0, y: 0, width: 150, height: 150)))
.verticalOffset(200)
}
above code will show as follows
func customView(forEmptyDataSet scrollView: UIScrollView) -> UIView? {
let label = UILabel()
label.text = "CustomView"
label.backgroundColor = UIColor.red
return label
}
above code will show as follows