高度封装tableView

来源:互联网 发布:2.0音箱推荐 知乎 编辑:程序博客网 时间:2024/06/04 16:44

   可以解决一种一组,一种多组,多种多组,多种一组的tableView

public enum  LSTableViewCellType{    case oneType_oneGroup            //一种  一组    WPBaseCell.Self                           [data]    case oneType_multipleGroup       //一种  多组    [WPBaseCell.Self]                         [data]   //  [[data1,data2],[data1,data2]]    case multipleType_oneGroup       //多种  一组    [WPBaseCell.Self,WPBaseCell2.Self]        [data1,data2]   cell.cout = data.cout    case multipleType_multipleGroup  //多种  多组    [[WPBaseCell1.Self,WPBaseCell2.Self],[]]  [[data1,data2],[data1,data2]]}extension UIViewController{    public  func cellBlock(_ cell:UITableViewCell,data:AnyObject,index:NSInteger)    {        }}extension UITableViewCell{    /**          Cell刷新数据     - parameter data: 数据源     */    public func cellRefreshData(_ data:(AnyObject!))    {        }        /**     计算Cell的高度     - parameter data: 数据源     - returns: 高度     */    public  class func heightForCell(_ data:(AnyObject!)) -> CGFloat    {        return 44;    }  }class LSTableViewDataKit: NSObject,UITableViewDataSource {    var tableView:UITableView!    var data:Array<AnyObject>!    var cellIDs:AnyObject!    var cellType:LSTableViewCellType = .oneType_oneGroup        weak var viewController:UIViewController!    /**     初始化          - parameter data:      数据源     一组  多组     - parameter cellID:    cellID    一种  多种(一组多种,多组多种)     - parameter tableView: tableView          - returns:     */    init(data:Array<AnyObject> = [AnyObject](),cellID:AnyObject,tableView:UITableView = UITableView(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight), style: .grouped),viewController:UIViewController) {       super.init()       self.data = data       self.tableView = tableView       self.cellIDs = cellID       self.viewController = viewController       self.tableView.backgroundColor = COLOR_BG       //注册Cell       self.registerCell()       tableView.dataSource = self    }           func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {        //分组        switch self.cellType {        case .oneType_oneGroup:            return  self.data.count        case .oneType_multipleGroup:            if let item = self.data[section] as? [AnyObject] {                return item.count            }else            {              return 1            }        case .multipleType_oneGroup:            return  self.data.count        case .multipleType_multipleGroup:           if let item  = self.data[section] as? [AnyObject]           {              return item.count           }        }        return 1    }        func numberOfSections(in tableView: UITableView) -> Int {                if self.cellType == .oneType_oneGroup || self.cellType == .multipleType_oneGroup {         return 1        }else        {           return self.data.count        }       }    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{        let cellType  =   self.cellWithIdentifier(indexPath).0        let cell =    tableView.dequeueReusableCell(withIdentifier: cellType, for:indexPath)        let itemData = self.cellWithIdentifier(indexPath).1                      if (self.viewController.responds(to: #selector(UIViewController.cellBlock(_:data:index:))))        {          if let itemCell = cell as? WPBaseCell          {             itemCell.delegateVC = viewController            switch self.cellType {            case .oneType_oneGroup:                 itemCell.baselineView.isHidden  = self.data.count - 1 == indexPath.row            case .oneType_multipleGroup:                if let item = self.data[indexPath.section] as? [AnyObject] {                    itemCell.baselineView.isHidden = item.count - 1 == indexPath.row                }else                {                    itemCell.baselineView.isHidden = self.data.count - 1 == indexPath.section                                    }            case .multipleType_oneGroup:                itemCell.baselineView.isHidden  =  self.data.count - 1 == indexPath.row            case .multipleType_multipleGroup:                if let item  = self.data[indexPath.section] as? [AnyObject]                {                    itemCell.baselineView.isHidden =  item.count - 1 == indexPath.row                }            }          }        }                //刷新数据        cell.cellRefreshData(itemData)                return  cell    }            //MARK: - 获取Cell和数据源    func cellWithIdentifier(_ indexPath: IndexPath) -> (String,AnyObject)    {        var aa:(cell:String,data:AnyObject) = ("","" as AnyObject)        switch self.cellType {        case .oneType_oneGroup:       //一组一种            if let cellID = cellIDs as? AnyClass{                aa.cell = String(describing: cellID)            }            aa.data = self.data[indexPath.row]                    case .oneType_multipleGroup:   //多组一种            if let cellID = cellIDs as? [AnyClass]{                aa.cell = String(describing: cellID[0])            }            //2种数据源            if let item = self.data[indexPath.section] as? [AnyObject] {                aa.data = item[indexPath.row]            }else{                aa.data = self.data[indexPath.section]            }                    case .multipleType_oneGroup:   //一组多种            if let cellID = cellIDs as? [AnyClass]{                if self.data.count ==  cellID.count{                    aa.cell = String(describing: cellID[indexPath.row])                }else                {                    aa.cell = String(describing: cellID[0])                }                aa.data = self.data[indexPath.row]            }        case .multipleType_multipleGroup:   //多组多种            if let itemData = self.data[indexPath.section] as? [AnyObject] {                aa.data = itemData[indexPath.row]            }            if let cellID = cellIDs as? [[AnyClass]]{                aa.cell = String(describing: cellID[indexPath.section][indexPath.row])            }        }        return aa    }    //MARK: - 注册Cell    func  registerCell()    {         if let cellID = cellIDs as? AnyClass         {  //一种            tableView.register(cellID, forCellReuseIdentifier:String(describing: cellID))            self.cellType = .oneType_oneGroup                     }else if let cellID = cellIDs as? [AnyClass]         {             //多种一组   一种多组             for  item in cellID             {                tableView.register(item, forCellReuseIdentifier: String(describing: item))             }             if cellID.count == 1{                self.cellType = .oneType_multipleGroup             }else{                self.cellType = .multipleType_oneGroup             }        }else if let cellID = cellIDs as? [Array<AnyClass>]         {            //多种多组            for  index1 in  cellID            {                 for index2 in index1                 {                   tableView.register(index2, forCellReuseIdentifier: String(describing: index2))                 }            }            self.cellType = .multipleType_multipleGroup         }else         {             debugPrint("注册异常,参数CellID错误")         }    }}


原创粉丝点击