ContactItemCell.swift 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. //
  2. // ContactItemCell.swift
  3. // O2Platform
  4. //
  5. // Created by 刘振兴 on 16/7/12.
  6. // Copyright © 2016年 zoneland. All rights reserved.
  7. //
  8. import UIKit
  9. import Alamofire
  10. import AlamofireImage
  11. import AlamofireObjectMapper
  12. protocol ContactItemCellBreadcrumbClickDelegate {
  13. func breadcrumbTap(name: String, distinguished: String)
  14. }
  15. class ContactItemCell: UITableViewCell {
  16. @IBOutlet weak var iconImageView: UIImageView!
  17. @IBOutlet weak var nameLabel: UILabel!
  18. @IBOutlet weak var iconTagLabel: UILabel!
  19. // 面包屑导航栏
  20. @IBOutlet weak var headBarScrollView: UIScrollView!
  21. var delegate: ContactItemCellBreadcrumbClickDelegate?
  22. var cellViewModel:CellViewModel? {
  23. didSet {
  24. configCellViewModel()
  25. }
  26. }
  27. override func awakeFromNib() {
  28. }
  29. override func setSelected(_ selected: Bool, animated: Bool) {
  30. super.setSelected(selected, animated: animated)
  31. }
  32. private func configCompany(){
  33. self.nameLabel.text = cellViewModel?.name
  34. self.iconTagLabel.isHidden = true
  35. self.iconImageView.image = O2ThemeManager.image(for: "Icon.icon_company")
  36. self.iconImageView.layer.masksToBounds = true
  37. self.iconImageView.layer.cornerRadius = self.iconImageView.width / 2.0
  38. }
  39. private func configDepart(){
  40. nameLabel.text = cellViewModel?.name
  41. iconTagLabel.isHidden = false
  42. iconImageView.image = O2ThemeManager.image(for: "Icon.pic_oval")
  43. iconImageView.frame = CGRect(x: 18, y: 5, width: 40, height: 40)
  44. iconImageView.layer.masksToBounds = true
  45. iconImageView.layer.cornerRadius = 40 / 2.0
  46. if let orgName = cellViewModel?.name,orgName != "" {
  47. iconTagLabel.text = NSString(string: orgName).substring(to: 1)
  48. iconTagLabel.center = iconImageView.center
  49. }
  50. nameLabel.font = UIFont(name: "PingFang SC", size: 14)
  51. nameLabel.frame.x = 66
  52. }
  53. private func configGroup(){
  54. self.nameLabel.text = cellViewModel?.name
  55. self.iconTagLabel.isHidden = true
  56. self.iconImageView.image = O2ThemeManager.image(for: "Icon.icon_group")
  57. self.iconImageView.layer.masksToBounds = true
  58. self.iconImageView.layer.cornerRadius = self.iconImageView.width / 2.0
  59. }
  60. private func configPerson(_ p:PersonV2){
  61. self.nameLabel.text = cellViewModel?.name
  62. self.iconTagLabel.isHidden = true
  63. self.iconImageView.layer.masksToBounds = true
  64. self.iconImageView.layer.cornerRadius = self.iconImageView.width / 2.0
  65. let person = p
  66. let urlstr = AppDelegate.o2Collect.generateURLWithAppContextKey(ContactContext.contactsContextKeyV2, query: ContactContext.personIconByNameQueryV2, parameter: ["##name##":person.id as AnyObject], generateTime: false)
  67. let url = URL(string: urlstr!)
  68. self.iconImageView.hnk_setImageFromURL(url!)
  69. }
  70. private func configIdentity(_ i:IdentityV2){
  71. self.nameLabel.text = cellViewModel?.name
  72. self.iconTagLabel.isHidden = true
  73. self.iconImageView.layer.masksToBounds = true
  74. self.iconImageView.layer.cornerRadius = self.iconImageView.width / 2.0
  75. let identity = i
  76. let urlstr = AppDelegate.o2Collect.generateURLWithAppContextKey(ContactContext.contactsContextKeyV2, query: ContactContext.personIconByNameQueryV2, parameter: ["##name##":identity.person as AnyObject], generateTime: false)
  77. let url = URL(string: urlstr!)
  78. self.iconImageView.hnk_setImageFromURL(url!)
  79. }
  80. private func configTitle(_ t:HeadTitle){
  81. let title = t
  82. if title.isBar {
  83. self.headBarScrollView.removeSubviews()
  84. var oX = CGFloat(4.0)
  85. if let bars = title.barText {
  86. bars.forEachEnumerated { (index, bar) in
  87. var name: String
  88. var textColor:UIColor
  89. if bars.count == (index+1) {
  90. name = bar.name ?? ""
  91. textColor = base_color
  92. }else {
  93. name = bar.name ?? ""
  94. name = name + " > "
  95. textColor = UIColor(hex:"#333333")
  96. }
  97. let firstSize = name.getSize(with: 15)
  98. let oY = (self.headBarScrollView.bounds.height - firstSize.height) / 2
  99. let firstLabel = UILabel(frame: CGRect(x: CGFloat(oX), y: oY, width: firstSize.width, height: firstSize.height))
  100. firstLabel.textAlignment = .left
  101. let textAttributes = [NSAttributedString.Key.foregroundColor: textColor,NSAttributedString.Key.font:UIFont(name:"PingFangSC-Regular",size:15)!]
  102. firstLabel.attributedText = NSMutableAttributedString(string: name, attributes: textAttributes)
  103. firstLabel.sizeToFit()
  104. oX += firstSize.width
  105. self.headBarScrollView.addSubview(firstLabel)
  106. firstLabel.addTapGesture(action: { (rec) in
  107. if bars.count != (index+1) {
  108. self.delegate?.breadcrumbTap(name: bar.name ?? "", distinguished: bar.distinguishedName ?? "")
  109. }
  110. })
  111. }
  112. }
  113. }else{
  114. nameLabel.text = cellViewModel?.name
  115. iconTagLabel.isHidden = true
  116. iconImageView.image = UIImage(named: title.icon!)
  117. iconImageView.frame = CGRect(x: 8, y: 10, width: 30, height: 30)
  118. iconImageView.layer.masksToBounds = true
  119. iconImageView.layer.cornerRadius = 15.0
  120. nameLabel.font = UIFont(name: "PingFang SC", size: 16.0)
  121. nameLabel.frame.x = 66
  122. }
  123. }
  124. func configCellViewModel() {
  125. let dataType = cellViewModel?.dataType
  126. switch dataType! {
  127. case .company(_):
  128. configCompany()
  129. break
  130. case .depart(_):
  131. configDepart()
  132. break
  133. case .group(_):
  134. configGroup()
  135. break
  136. case .person(let p):
  137. configPerson(p as! PersonV2)
  138. break
  139. case .identity(let i):
  140. configIdentity(i as! IdentityV2)
  141. case .title(let t):
  142. configTitle(t as! HeadTitle)
  143. break
  144. default:
  145. break
  146. }
  147. }
  148. }