ios开发框架封装(五):封装UITableViewController基类

376 阅读3分钟

先放demo地址:github.com/KeWangKW/99…

  • swift-----KSTableVC【继承自KSViewController】

  • OC-----KOTableVC【继承自KOViewController】

  • 从此,项目内所需要UITableView的页面, 都将继承自 KSTableVC 或 KOTableVC

  • pod 集成 MJRefresh 、DZNEmptyDataSet

    屏幕录制2023-06-27 16.27.42.gif

1. VC使用示例:

    1. kw_initData 方法中:
    • 空页面处理:
      • emptyDataSetImage = UIImage(named: "ic_sxy_searchBG")
      • emptyDataSetTitle = "列表为空"
      • emptyDataSetDescription = "暂无数据"
    • 刷新加载处理:默认不添加下拉刷新上拉加载功能
      • isAddRefreshHeader = true //添加下拉刷新
      • isAddRefreshFooter = true //添加上拉加载
      • isAddRefreshFooter 设置后,需要注意必须设置页数 pagecount,否则由于pagecount默认值是1,导致其认为已全部加载完成
    • 根据列表样式设置数据源:
      • DataArr.append(Section0Arr)
      • 固定了10个section数组,如果页面需要无数个分组、不固定分组,请自行根据返回数据设置数组,重写 kw_refreshData 和 kw_loadMoreData 方法,处理数组中的数据
    • 设置UITableView.Style:默认plain
      • style = .grouped
      • 设置成group类型
    • 注册cell:
      • 注册普通cell
      • tableView.kw_register(cell: TestTableVIewShowCell.self)
      • 注册xib创建的cell
      • tableView.kw_registerXib(cellXib: TestTableVIewShowCell.self)
      • 其他或者实现,请查看 KSTableVC 中的 public extension UITableView 【OC:KOTableVC文件中的 UITableView (Category) 】
    1. kw_initUI 方法中:
    • tableView.frame = CGRect(x: 0, y: KNavigationStatusHeight, width: KScreenWidth, height: KScreenHeight-KNavigationStatusHeight)
    • tableView.backgroundColor = UIColor.red
    • 可修改tableView的部分属性
    1. kw_requestData 数据请求中:
    • 如果需要上拉加载的分页功能,需要设置总页数pageCount = 3
    • 一般情况下接口返回数据中都会给出当前页数和总页数,如果接口不返回总页数,需要进行如下设置
      • 比如每次请求一页的数据为20条
      • 当返回数据是小于20条时,表示已经到最后一页了,设置 pagecount = page 总页数等于当前页数
    • 根据返回数据解析成model
    1. refreshCell 方法,随便自定义方法名,用来设置Data数组中的数据
    • let item = TestTableVIewShowCellItem()
    • item.cellModel = xxxx 设置cell中数据model
    • item.str = string 设置自定义属性值
    • DataArr[0].append(item) 添加到Data数组中
    • 最后调用kw_tableViewReloadData() 方法刷新页面

2. cell使用示例:

  • 定义KSTableCellItem 继承自NSObject,根据需要添加自定义属性
class TestTableVIewShowCellItem: KSTableCellItem {
    var str:String = ""
    override var cellHeight: CGFloat {
        get{45} set{}
    }
}
  • str 为自定义的传值属性
  • cellHeight 为当前cell高度,若不设置默认高度为0,cell高度为 UITableViewAutomaticDimension 自适应,需要在cell中通过使用AutoLayout或者Masnory、Snapkit 或在xib中 设置好子控件约束
class TestTableVIewShowCell: KSTableCell {
    @IBOutlet weak var xibLab: UILabel!
    override var item: KSTableCellItem!{
        didSet{
            let i = item as! TestTableVIewShowCellItem
            xibLab.text = i.str
            //let model = item.cellModel as! XXXModel
            //xibLab.text = model.str
        }
    }
    override func kw_setupViews() {
        super.kw_setupViews()
        self.backgroundColor = .cyan
    }
    override func kw_setupLayouts() {
        super.kw_setupLayouts()
    }
}
  • item as! TestTableVIewShowCellItem 可获取到自定义item中的 自定义属性值
  • item.cellModel as! XXXModel 获取model

3. DZNEmptyDataSet 处理:

  • podfile文件中添加:pod 'DZNEmptyDataSet'
  • 添加了一个 UIViewController 的拓展文件,实现DZNEmptyDataSet方法
  • 不贴代码了,DZNEmptyDataSet,请自行查看demo
  • 不止能在列表页使用,所有继承自UIViewController的类都能用,默认空图片、空标题、空描述 都为空
  • 使用时设置以下属性即可
    • emptyDataSetImage =
    • emptyDataSetTitle =
    • emptyDataSetDescription =

4. MJRefresh 处理:

  • podfile文件中添加:pod 'MJRefresh'
  • MJRefresh文件中作了部分处理,定义了mj_header、mj_footer 的样式,可根据需要自行修改