给 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 }
时间: 2024-10-10 17:55:33

给 cell 传值时,直接将 model 传给 cell的相关文章

maven多模块项目执行 deploy 时 忽略某些model (忽略war包)

maven deploy 时,通常需要忽略生成war的model,简单调整一下配置即可: <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> <configuration> <ski

iOS UITableView 滑动时顺序混乱或多个cell内容相同

在使用UITableView时,由于cell的重用机制,在获取后台数据并填充cell时,会发生cell重复出现,界面紊乱.但这仅仅在拥有多个section的情况下会出现,没有滚动的时候,单个section的row显示的都是正确的. 以下是示例代码: -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath //这个方法是UITableView 的 Da

Java 向main方法传值时关于*号的问题

现有要求如下: 通过cmd的方式,求简单表达式的值. 比如输入 java Expression 3 + 4 得到的结果为:7 代码: import java.text.DecimalFormat; public class Expression { public static void main(String[] args) throws Exception { if(args == null || args.length != 3){ //MyException只是简单的继承Exception

UI基础--封装cell滑动时的动画

新建一个类:CellDisplay:NSObject .h #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface CellDisplay : NSObject +(void)tableView:(UITableView *)tableView cell:(UITableViewCell *)cell IndexPath:(NSIndexPath *)indexPath; @end .m #impor

iOS tableViewCell 在自定义高度方法中遇到的问题,cell高度为0,cell显示不出来,cell直接显示第几个而不是...cell显示个数不对

遇到以上问题可以看看你的cell高度中是否有,自定的高度,有了继续看,没有了继续百度... 在文字排版中,少不了自适应文字高度,行间距什么的:显然cell的高度时不固定的,如果复用自定义的cell的话,又要及时把高度传给cell,进行赋值: 在-(UITableViewCell*)tableview... cellForRow...{在里边进行计算cell高度时可以的,需要将数值赋值给 cell.height=这个属性: 不可以设置全局CGFloat传值,因为赋值还没有进行完,在HeightRo

视频电商网站vue+七牛JSSDK集成(3)上传视频时暂停和续传

1.准备2个图片 2.这是我们用来控制视频上传/暂停 的按钮显示图片. 在vue.js的data() 里准备好变量(切换2个按钮图片的变量) options:{ iconsrc:'/icons/pause.png', uploadpause:'/icons/pause.png', uploadstart:'/icons/start.png' }, 3.编写切换按钮的事件 在vue.js的methods 里: pauseUpload(){ if (this.options.iconsrc == t

java 附件上传时后台验证上传文件的合法性

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8

用Model来计算cell的高度

效果: 将计算cell高度的方法直接移植到Model当中,初始化的瞬间就计算好了高度,非常好用! 源码: Model // // Model.h // // Copyright (c) 2014年 Y.X. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Model : NSObject @property (nonatomic, strong)

【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意按钮状态的检查

(1)效果 (2)源代码与资源下载 http://pan.baidu.com/s/1pJLo2PP (3)总结 --核心是利用UITableView里面自带的cell来制作样式相同的cell. 与之相应的是,因为不是整个xib文件,所以加载这个cell时有一些区别,只需要在缓存池中取即可(利用ID). +(instancetype)cellWithTableView:(UITableView *)tableView{ static NSString *[email protected]"app&