首页 > 代码库 > 给 cell 传值时,直接将 model 传给 cell
给 cell 传值时,直接将 model 传给 cell
1、使用第三方库 MJExtension 将字典转模型
2、在 cellForRowAtIndexPath: 中将 AppModel 创给 MyTableViewCell, 然后在 MyTabelViewCell 里面对 cell 内的每个控件进行赋值
3、MyTabelViewCell 类需要重写init(style: UITableViewCellStyle, reuseIdentifier resueIdentifier: String?){}方法
4、直接将 model 创给自定义 cell, 然后在自定义 cell 里面进行赋值,这样避免了cellForRowAtIndexPath:代码过多
代码:
ViewController.swift:
1 import UIKit 2 import MJExtension 3 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 lazy var tableView: UITableView = { 5 6 let tableView: UITableView! 7 8 tableView = UITableView(frame: self.view.frame, style: .plain) 9 tableView.delegate = self 10 tableView.dataSource = self 11 12 return tableView 13 }() 14 15 // lazy 16 17 // var items = ["北京", "上海", "广东", "深圳", "杭州"] 18 var items = [["imageName": "1", "appName": "Football Maze", "appDescription": "足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球"], 19 ["imageName": "1", "appName": "租房点评", "appDescription": "足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球足球"], 20 ["imageName": "1", "appName": " iJump", "appDescription": "运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动运动"], 21 ["imageName": "1", "appName": "哪里逃", "appDescription": "跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路跑路"]] 22 23 override func viewDidLoad() { 24 super.viewDidLoad() 25 26 // 将tableView 添加到 view 上 27 self.view.addSubview(self.tableView) 28 29 // self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "编辑", style: .done, target: self, action: #selector(ViewController.editButtonClick)) 30 31 // self.navigationItem.sel 32 } 33 34 override func didReceiveMemoryWarning() { 35 super.didReceiveMemoryWarning() 36 // Dispose of any resources that can be recreated. 37 } 38 39 // MARK: -UITableViewDelegate, UITableViewDataSource 40 // tableView 数据源: 返回几个组 41 func numberOfSections(in tableView: UITableView) -> Int { 42 return 1 43 } 44 45 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 46 47 let cellIdentifier = "cellIdentifier" 48 var cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) as? MyTableViewCell 49 50 if cell == nil { 51 cell = MyTableViewCell(style: .subtitle, reuseIdentifier: cellIdentifier) 52 53 // 设置 cell 字体 54 cell?.textLabel?.font = UIFont.systemFont(ofSize: 14) 55 56 // 设置选中 cell 样式 57 cell?.selectionStyle = .gray 58 59 // 设置 cell 后面的箭头样式 60 cell?.accessoryType = .disclosureIndicator 61 62 } 63 64 // 设置 cell 的内容 65 // cell?.textLabel?.text = items[indexPath.row] 66 67 // 设置 cell 图片 68 // cell?.imageView?.image = UIImage(named: "1") 69 70 // cell?.detailTextLabel?.text = "详细信息介绍" 71 let cellModel: AppsModel = AppsModel.mj_object(withKeyValues: self.items[indexPath.row]) // 使用 MJExtension 将字典转模型 72 73 // 通过自定义方法给 cell 赋值 74 cell?.showAppInfoWithModel(model: cellModel) 75 76 return cell! 77 } 78 79 // 设置行高 80 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 81 return 60 82 } 83 }
MyTableViewCell.swift:
1 import UIKit 2 class MyTableViewCell: UITableViewCell { 3 var iconImageView: UIImageView! // 图片 4 var appNameLabel: UILabel! // 标题 5 var descriptionLabel: UILabel! // 描述 6 7 // 赋值方法 - 显示 cell 内容方法 8 func showAppInfoWithModel(model: AppsModel) { 9 // 获取 model 中的图片 10 iconImageView.image = UIImage(named: model.imageName!) 11 12 // 获取 model 中的App 名字 13 appNameLabel.text = model.appName 14 15 // 获取 model 中的 App 描述 16 descriptionLabel.text = model.appDescription 17 } 18 19 override init(style: UITableViewCellStyle, reuseIdentifier resueIdentifier: String?) { 20 super.init(style: style, reuseIdentifier: resueIdentifier) 21 22 // 创建 iconImageView 23 iconImageView = UIImageView(frame: CGRect(x: 10, y: 5, width: 40, height: 40)) 24 self.addSubview(iconImageView) 25 26 // 创建 appNameLabel 27 appNameLabel = UILabel(frame: CGRect(x: 60, y: 0, width: 220, height: 15)) 28 appNameLabel.font = UIFont.systemFont(ofSize: 16) 29 self.addSubview(appNameLabel) 30 31 // 创建 desctiptionLabel 32 descriptionLabel = UILabel(frame: CGRect(x: 60, y: 15, width: 220, height: 35)) 33 descriptionLabel.font = UIFont.systemFont(ofSize: 12) 34 descriptionLabel.numberOfLines = 2 35 descriptionLabel.textColor = UIColor.lightGray 36 self.addSubview(descriptionLabel) 37 } 38 39 required init?(coder aDecoder: NSCoder) { 40 fatalError("init(coder:) has not been implemented") 41 } 42 43 override func awakeFromNib() { 44 super.awakeFromNib() 45 // Initialization code 46 } 47 override func setSelected(_ selected: Bool, animated: Bool) { 48 super.setSelected(selected, animated: animated) 49 // Configure the view for the selected state 50 } 51 }
AppsModel.swift:
1 import UIKit 2 3 class AppsModel: NSObject { 4 5 var imageName: String? 6 var appName: String? 7 var appDescription: String? 8 }
给 cell 传值时,直接将 model 传给 cell
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。