专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

设置HMStatusCell内容

设置HMStatusCell对应微博模型

  • HMStatusCell 添加 statusVM 属性
    class HMStatusCell: UITableViewCell {
      /// 微博ViewModel
      var statusVM: HMStatusViewModel?
      ...
    }
    
  • HMHomeViewControllertableView 数据源方法 tableView:cellForRowAt: 设置对应 CellHMStatusViewModel

    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
    }
    
  • HMStatusCellstatusVM: HMStatusViewModel 属性添加属性监视器

    /// 微博ViewModel
    var statusVM: HMStatusViewModel? {
      didSet {
    
      }
    }
    

设置HMStatusCell基本内容

  • HMStatusCellstatusVM: 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
      }
    }
    
  • 运行: 效果如下

设置会员等级和认证类型图标

  • HMStatusCellstatusVM: 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 显示时会设置 CellstatusVM: 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"]))"
      }
    }
    
  • HMStatusViewModelinit(status: HMStatus) 构造函数中给 verifiedImagembrankImage 属性赋值

    // 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
      }
    }
    
  • HMStatusCellstatusVM: HMStatusViewModel 属性监视器中直接使用 HMStatusViewModelverifiedImagembrankImage 属性

    /// 微博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
      }
    }
    
  • 运行: 效果和之前一样,但是程序的计算减少了

results matching ""

    No results matching ""