麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Swift > 正文

Swift解決UITableView空數據視圖問題的簡單方法

2020-03-09 17:31:16
字體:
來源:轉載
供稿:網友

前言

UITableView在現如今的APP中已經成為必不可少的一個控件,所以今天給大家帶來UITableView在Swift中是如何實現的,下面這篇文章主要給大家介紹了關于Swift解決UITableView空數據視圖的相關內容,下面話不多說了,來一起看看詳細的介紹吧

tableView空數據問題

一般項目中tableView若數據為空時會有一個提示示意圖

為了更好的管理這種提示示意圖,筆者利用extension進行了簡單的拓展

解決思路

利用swift面向協議的特點,使用協議來進行設置。

  • 設計空視圖協議
  • tableView設置空視圖代理
  • 每次重繪tableView時判斷添加或移除空數據提示圖

Swift,UITableView,空數據,視圖

具體實現

空視圖協議,遵守協議必須實現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)  } }

示例代碼

//關鍵部分代碼class ViewController: UIViewController , EmptyViewProtocol { private var datas: Array<Dictionary<String, String>>? /// 空數據提示圖 private var label: UILabel?   var showEmtpy: Bool {  get {   if let data = self.datas {    return data.count == 0   }   return true  } }  override func viewDidLoad() {  super.viewDidLoad()  let tableView: UITableView = ...  tableView.setEmtpyViewDelegate(target: self)  self.view.addSubview(tableView) }  func configEmptyView() -> UIView? {   if let view = self.label {   return view  }    let lab = UILabel(frame: CGRect(x: 100, y: 300, width: 200, height: 30))  lab.text = "this is a test"  lab.textAlignment = .center  self.label = lab    return lab }}

效果圖如下

Swift,UITableView,空數據,視圖

最后

  • 該設計較為簡單方便管理,若有不妥之處望指出
  • 相關代碼請前往swiftCustomControl 查看

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久最新网址 | 亚洲欧美一区二区三区在线观看 | 免费一级毛片在线播放视频老 | 西川av在线一区二区三区 | 日韩av电影免费在线观看 | 澳门一级淫片免费视频 | 免费毛片电影 | 午夜视频在线看 | 99久久精品免费 | 成人一级黄色片 | 国产女厕一区二区三区在线视 | 久久久久久久久国产 | 国产美女爽到喷白浆的 | 中日韩乱码一二新区 | 在线成人免费观看视频 | 免费观看视频在线 | 毛片在线视频观看 | 久久色在线 | 黄视频免费观看 | 国产成人免费高清激情视频 | 国产精品久久久久久模特 | 欧美精品一区二区视频 | 久久成人免费网 | 久久成人福利 | 亚洲天堂ww | 黄色大片在线免费看 | 中国黄色一级生活片 | 91久久极品少妇韩国 | 黑人三级毛片 | 午夜久| 天天看夜夜爽 | 草草影院地址 | 欧美精品a∨在线观看不卡 午夜精品影院 | 国产日韩精品欧美一区视频 | 欧美中文字幕一区二区三区亚洲 | 毛片福利| 九九热视频这里只有精品 | 免费毛片视频 | 久久艹精品| 日本在线观看中文字幕 | 亚洲精品3|