高度封装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错误") } }}
阅读全文
0 0
- 高度封装tableView
- iOS tableview动态高度
- IOS tableView自适应高度
- tableView高度自适应
- iOS tableview自适应高度
- tableview 去除footer高度
- TableView高度缓存技巧
- tableView 的cell自适应高度
- tableView头部多空白高度
- swift tableview cell自适应高度
- iOS 设置tableview动态高度
- autolayout 计算tableView的高度
- tableView 头视图的高度
- TableView优化之高度缓存
- tableview和cell高度自适应
- TableView优化之高度缓存
- ios TableView tableHeader高度不正确
- tableView 头部webView 高度获取
- Yii2 增删改查(CRUD) 整理
- 模糊聚类分析
- 1032. 挖掘机技术哪家强(20)
- python数据预处理(抽样、数据集转换)
- xcode真机调试配置
- 高度封装tableView
- MySQL自定义函数用法详解-复合结构自定义变量/流程控制
- Socket传中文乱码问题的解决
- 菱形继承
- K3忘记帐套管理员密码的解决办法
- 报错笔记
- ansible模块command、shell、raw、script
- http与cgi的小测试之GET
- 游戏应用渠道分析