专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
设置HMStatusCell内容
设置HMStatusCell对应微博模型
- 在
HMStatusCell
添加statusVM
属性class HMStatusCell: UITableViewCell { /// 微博ViewModel var statusVM: HMStatusViewModel? ... }
在
HMHomeViewController
的tableView
数据源方法tableView:cellForRowAt:
设置对应Cell
的HMStatusViewModel
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "OriginalCell", for: indexPath) as! HMStatusCell // 获取对应的单个微博VM let statusVM = self.statusVMs![indexPath.row] // 设置对应 Cell 的 HMStatusViewModel cell.statusVM = statusVM return cell }
给
HMStatusCell
的statusVM: HMStatusViewModel
属性添加属性监视器/// 微博ViewModel var statusVM: HMStatusViewModel? { didSet { } }
设置HMStatusCell基本内容
在
HMStatusCell
的statusVM: HMStatusViewModel
属性添加属性监视器里面设置Cell
的内容/// 微博ViewModel var statusVM: HMStatusViewModel? { didSet { guard let status = statusVM?.status else { print("statusVM中没有微博") return } // 头像,使用SDWebImage设置网络图片内容 let iconURL = URL(string: status.user?.profile_image_url ?? "") iconView.sd_setImage(with: iconURL, placeholderImage: UIImage(named: "avator")) // 用户名称 nameLabel.text = status.user?.name ?? "未知用户名称" // 来源 sourceLabel.text = status.source ?? "未知来源" // 时间 timeLabel.text = status.created_at ?? "未知时间" // 微博内容 statusText.text = status.text } }
- 运行: 效果如下
设置会员等级和认证类型图标
在
HMStatusCell
的statusVM: HMStatusViewModel
属性添加属性监视器里面设置会员等级
和认证类型
图标/// 微博ViewModel var statusVM: HMStatusViewModel? { didSet { guard let status = statusVM?.status else { print("statusVM中没有微博") return } ... // 会员等级 if let mbrank = status.user?.mbrank { if mbrank > 0 && mbrank <= 6 { memberView.image = UIImage(named: "common_icon_membership_level\(mbrank)") } else { memberView.image = nil } } // 认证图标 if let verifiedType = status.user?.verified_type { var image: UIImage? = nil switch verifiedType { case 0: image = UIImage(named: "avatar_vip") case 2,3,5: image = UIImage(named: "avatar_enterprise_vip") case 220: image = UIImage(named: "avatar_grassroot") default: image = nil } verifiedView.image = image } } }
- 发现
会员等级
和认证图标
获取图片不应该在Cell
里面进行判断.每次在Cell
显示时会设置Cell
的statusVM: HMStatusViewModel
, 会多次判断会员等级
和认证图标
, 最好是由HMStatusViewModel
计算一次,Cell
直接拿到图片来用 在
HMStatusViewModel
添加认证类型图片
和会员等级图片
2个属性/// 一个HMStatusViewModel包含一个微博模型 class HMStatusViewModel: NSObject { // MARK: - 属性 /// 微博模型 var status: HMStatus /// 视图模型提供 认证类型的图片 var verifiedImage: UIImage? /// 视图模型提供 会员等级的图片 var mbrankImage: UIImage? // MARK: - 构造函数 init(status: HMStatus) { self.status = status } override var description: String { return "\(dictionaryWithValues(forKeys: ["status"]))" } }
在
HMStatusViewModel
的init(status: HMStatus)
构造函数中给verifiedImage
和mbrankImage
属性赋值// MARK: - 构造函数 init(status: HMStatus) { self.status = status let verified_type = status.user?.verified_type ?? -1 /// verified_type 没有认证:-1 认证用户:0 企业认证:2,3,5 达人:220 switch verified_type { case 0: verifiedImage = UIImage(named: "avatar_vip") case 2,3,5: verifiedImage = UIImage(named: "avatar_enterprise_vip") case 220: verifiedImage = UIImage(named: "avatar_grassroot") default: // 其他情况 verifiedImage = nil } let mbrank = status.user?.mbrank ?? 0 /// 会员等级 1-6 // kvc设置会员等级的,知道自己是几级,就创建对应的图片 if mbrank > 0 && mbrank <= 6 { mbrankImage = UIImage(named: "common_icon_membership_level\(mbrank)") } else { mbrankImage = nil } }
在
HMStatusCell
的statusVM: HMStatusViewModel
属性监视器中直接使用HMStatusViewModel
的verifiedImage
和mbrankImage
属性/// 微博ViewModel var statusVM: HMStatusViewModel? { didSet { guard let status = statusVM?.status else { print("statusVM中没有微博") return } // 头像,使用SDWebImage设置网络图片内容 let iconURL = URL(string: status.user?.profile_image_url ?? "") iconView.sd_setImage(with: iconURL, placeholderImage: UIImage(named: "avator")) // 用户名称 nameLabel.text = status.user?.name ?? "未知用户名称" // 来源 sourceLabel.text = status.source ?? "未知来源" // 时间 timeLabel.text = status.created_at ?? "未知时间" // 微博内容 statusText.text = status.text // 会员等级 memberView.image = statusVM?.mbrankImage // 认证图标 verifiedView.image = statusVM?.verifiedImage } }
- 运行: 效果和之前一样,但是程序的计算减少了