JCUserAvatorCell.swift 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // JCUserAvatorCell.swift
  3. // JChat
  4. //
  5. // Created by deng on 2017/5/16.
  6. // Copyright © 2017年 HXHG. All rights reserved.
  7. //
  8. import UIKit
  9. import JMessage
  10. @objc public protocol JCUserAvatorCellDelegate: NSObjectProtocol {
  11. @objc optional func tapAvator(_ image: UIImage?)
  12. }
  13. class JCUserAvatorCell: JCTableViewCell {
  14. weak var delegate: JCUserAvatorCellDelegate?
  15. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  16. super.init(style: style, reuseIdentifier: reuseIdentifier)
  17. _init()
  18. }
  19. required init?(coder aDecoder: NSCoder) {
  20. super.init(coder: aDecoder)
  21. _init()
  22. }
  23. override func awakeFromNib() {
  24. super.awakeFromNib()
  25. _init()
  26. }
  27. private lazy var avatorView: UIImageView = UIImageView()
  28. private lazy var nameLabel: UILabel = UILabel()
  29. private lazy var signatureLabel: UILabel = UILabel()
  30. private lazy var defaultAvator = UIImage.loadImage("com_icon_user_80")
  31. //MARK: - private func
  32. private func _init() {
  33. let tapGR = UITapGestureRecognizer(target: self, action: #selector(_tapHandler))
  34. avatorView.addGestureRecognizer(tapGR)
  35. avatorView.isUserInteractionEnabled = true
  36. avatorView.image = defaultAvator
  37. avatorView.contentMode = .scaleAspectFill
  38. avatorView.clipsToBounds = true
  39. nameLabel.textAlignment = .center
  40. nameLabel.font = UIFont.systemFont(ofSize: 16)
  41. nameLabel.textColor = UIColor(netHex: 0x2C2C2C)
  42. signatureLabel.textAlignment = .center
  43. signatureLabel.font = UIFont.systemFont(ofSize: 13)
  44. signatureLabel.textColor = UIColor(netHex: 0x999999)
  45. signatureLabel.numberOfLines = 0
  46. contentView.addSubview(avatorView)
  47. contentView.addSubview(nameLabel)
  48. contentView.addSubview(signatureLabel)
  49. addConstraint(_JCLayoutConstraintMake(avatorView, .top, .equal, contentView, .top, 25))
  50. addConstraint(_JCLayoutConstraintMake(avatorView, .centerX, .equal, contentView, .centerX))
  51. addConstraint(_JCLayoutConstraintMake(avatorView, .width, .equal, nil, .notAnAttribute, 80))
  52. addConstraint(_JCLayoutConstraintMake(avatorView, .height, .equal, nil, .notAnAttribute, 80))
  53. addConstraint(_JCLayoutConstraintMake(nameLabel, .top, .equal, avatorView, .bottom, 6.5))
  54. addConstraint(_JCLayoutConstraintMake(nameLabel, .right, .equal, contentView, .right, -15))
  55. addConstraint(_JCLayoutConstraintMake(nameLabel, .left, .equal, contentView, .left, 15))
  56. addConstraint(_JCLayoutConstraintMake(nameLabel, .height, .equal, nil, .notAnAttribute, 22.5))
  57. addConstraint(_JCLayoutConstraintMake(signatureLabel, .top, .equal, nameLabel, .bottom, 3))
  58. addConstraint(_JCLayoutConstraintMake(signatureLabel, .centerX, .equal, contentView, .centerX))
  59. addConstraint(_JCLayoutConstraintMake(signatureLabel, .height, .equal, nil, .notAnAttribute, 37))
  60. addConstraint(_JCLayoutConstraintMake(signatureLabel, .width, .equal, nil, .notAnAttribute, 210))
  61. }
  62. func bindData(user: JMSGUser) {
  63. nameLabel.text = user.displayName()
  64. signatureLabel.text = user.signature
  65. avatorView.image = defaultAvator
  66. user.largeAvatarData { (data, username, error) in
  67. guard let imageData = data else {
  68. return
  69. }
  70. let image = UIImage(data: imageData)
  71. self.avatorView.image = image
  72. }
  73. }
  74. func _tapHandler(sender:UITapGestureRecognizer) {
  75. delegate?.tapAvator?(self.avatorView.image)
  76. }
  77. }