Swift几行代码解决UITableView空数据视图问题

 

ableView空数据问题

一般项目中tableView若数据为空时会有一个提示示意图

为了更好的管理这种提示示意图,笔者利用extension进行了简单的拓展

解决思路

利用swift面向协议的特点,使用协议来进行设置。

  • 设计空视图协议
  • tableView设置空视图代理
  • 每次重绘tableView时判断添加或移除空数据提示图

具体实现

  • 空视图协议,遵守协议必须实现showEmtpy属性
private let EmptyViewTag = 12345;  protocol EmptyViewProtocol: NSObjectProtocol {          ///用以判断是会否显示空视图     var showEmtpy: Bool {get}          ///配置空数据提示图用于展示     func configEmptyView() -> UIView? }  extension EmptyViewProtocol {          func configEmptyView() -> UIView? {         return nil     } }
  • tableView扩展配置,实现空数据示意图展示判断

DispatchQueue.once和BQTool.exchangeMethod是只执行一次方法交换操作,具体实现可看源码

    func setEmtpyViewDelegate(target: EmptyViewProtocol) {         self.emptyDelegate = target         DispatchQueue.once(#function) {             BQTool.exchangeMethod(cls: self.classForCoder, targetSel: #selector(self.layoutSubviews), newSel: #selector(self.re_layoutSubviews))         }     }      @objc func re_layoutSubviews() {         self.re_layoutSubviews()                  if self.emptyDelegate!.showEmtpy {                          guard let view = self.emptyDelegate?.configEmptyView() else {                 return;             }                          view.tag = EmptyViewTag;             self.addSubview(view)                      } else {                          guard let view = self.viewWithTag(EmptyViewTag) else {                 return;             }             view .removeFromSuperview()         }     }      //MARK:- ***** Associated Object *****     private struct AssociatedKeys {         static var emptyViewDelegate = "tableView_emptyViewDelegate"     }          private var emptyDelegate: EmptyViewProtocol? {         get {             return (objc_getAssociatedObject(self, &AssociatedKeys.emptyViewDelegate) as! EmptyViewProtocol)         }         set (newValue){             objc_setAssociatedObject(self, &AssociatedKeys.emptyViewDelegate, newValue!, .OBJC_ASSOCIATION_RETAIN)         }     }

示例代码


                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信