If no Table View results, display “No Results” on screen

后端 未结 14 1606
挽巷
挽巷 2020-11-30 17:25

I have a tableview, where sometimes there might not be any results to list, so I would like to put something up that says \"no results\" if the

14条回答
  •  自闭症患者
    2020-11-30 18:00

    Add this code in one file and change your collection type to CustomCollectionView

    import Foundation
    
    class CustomCollectionView: UICollectionView {
    
      var emptyModel = EmptyMessageModel()
      var emptyView: EmptyMessageView?
      var showEmptyView: Bool = true
    
      override func reloadData() {
        super.reloadData()
    
        emptyView?.removeFromSuperview()
        self.backgroundView = nil
    
        if !showEmptyView {
          return
        }
    
        if numberOfSections < 1 {
          let rect = CGRect(x: 0,
                            y: 0,
                            width: self.bounds.size.width,
                            height: self.bounds.size.height)
    
          emptyView = EmptyMessageView()
          emptyView?.frame = rect
          if let emptyView = emptyView {
            //                self.addSubview(emptyView)
            self.backgroundView = emptyView
          }
          emptyView?.setView(with: emptyModel)
    
        } else {
          emptyView?.removeFromSuperview()
          self.backgroundView = nil
        }
      }
    }
    
    class EmptyMessageView: UIView {
    
      @IBOutlet weak var messageLabel: UILabel!
      @IBOutlet weak var imageView: UIImageView!
    
      var view: UIView!
    
      override init(frame: CGRect) {
        super.init(frame: frame)
        xibSetup()
      }
    
      required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        xibSetup()
      }
    
      func xibSetup() {
        view = loadViewFromNib()
    
        view.frame = bounds
    
        view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        addSubview(view)
      }
    
      func loadViewFromNib() -> UIView {
    
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "EmptyMessageView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
    
        return view
      }
    
      func setView(with model: EmptyMessageModel) {
        messageLabel.text = model.message ?? ""
        imageView.image = model.image ?? #imageLiteral(resourceName: "no_notification")
      }
    }
    
    ///////////
    class EmptyMessageModel {
      var message: String?
      var image: UIImage?
    
      init(message: String = "No data available", image: UIImage = #imageLiteral(resourceName: "no_notification")) {
        self.message = message
        self.image = image
      }
    }
    

提交回复
热议问题