ServerListTableViewCell.swift 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. //
  2. // ServerListTableViewCell.swift
  3. // Bark
  4. //
  5. // Created by huangfeng on 2022/4/1.
  6. // Copyright © 2022 Fin. All rights reserved.
  7. //
  8. import Material
  9. import UIKit
  10. class ServerListTableViewCell: BaseTableViewCell<ServerListTableViewCellViewModel> {
  11. let backgroundPanel: UIView = {
  12. let view = UIView()
  13. view.layer.cornerRadius = 3
  14. view.clipsToBounds = true
  15. view.backgroundColor = BKColor.background.secondary
  16. view.layer.cornerRadius = 25
  17. view.clipsToBounds = true
  18. view.layer.borderColor = BKColor.grey.lighten3.cgColor
  19. view.layer.borderWidth = 1
  20. return view
  21. }()
  22. let addressLabel: UILabel = {
  23. let label = UILabel()
  24. label.font = RobotoFont.medium(with: 14)
  25. label.textColor = BKColor.grey.darken4
  26. label.numberOfLines = 0
  27. return label
  28. }()
  29. let keyLabel: UILabel = {
  30. let label = UILabel()
  31. label.font = RobotoFont.regular(with: 12)
  32. label.textColor = BKColor.grey.darken4
  33. label.numberOfLines = 0
  34. return label
  35. }()
  36. let stateImageView: UIImageView = {
  37. let imageView = UIImageView()
  38. imageView.contentMode = .scaleAspectFit
  39. imageView.layer.cornerRadius = 15
  40. imageView.clipsToBounds = true
  41. return imageView
  42. }()
  43. var state: Bool = false {
  44. didSet {
  45. if state {
  46. stateImageView.image = UIImage(named: "online")
  47. }
  48. else {
  49. stateImageView.image = UIImage(named: "offline")
  50. }
  51. }
  52. }
  53. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  54. super.init(style: style, reuseIdentifier: reuseIdentifier)
  55. self.selectionStyle = .none
  56. self.backgroundColor = BKColor.background.primary
  57. addSubview(backgroundPanel)
  58. addSubview(stateImageView)
  59. addSubview(addressLabel)
  60. addSubview(keyLabel)
  61. backgroundPanel.snp.makeConstraints { make in
  62. make.left.equalToSuperview().offset(18)
  63. make.right.equalToSuperview().offset(-18)
  64. make.top.equalToSuperview().offset(5)
  65. make.bottom.equalToSuperview().offset(-5)
  66. make.height.equalTo(50)
  67. }
  68. stateImageView.snp.makeConstraints { make in
  69. make.centerY.equalTo(backgroundPanel)
  70. make.left.equalTo(backgroundPanel).offset(13)
  71. make.width.height.equalTo(30)
  72. }
  73. addressLabel.snp.makeConstraints { make in
  74. make.left.equalTo(stateImageView.snp.right).offset(8)
  75. make.top.equalTo(backgroundPanel).offset(8)
  76. make.right.equalTo(backgroundPanel).offset(-8)
  77. }
  78. keyLabel.snp.makeConstraints { make in
  79. make.top.equalTo(addressLabel.snp.bottom).offset(1)
  80. make.left.right.equalTo(addressLabel)
  81. }
  82. }
  83. @available(*, unavailable)
  84. required init?(coder: NSCoder) {
  85. fatalError("init(coder:) has not been implemented")
  86. }
  87. override func bindViewModel(model: ServerListTableViewCellViewModel) {
  88. super.bindViewModel(model: model)
  89. model.address
  90. .bind(to: addressLabel.rx.text)
  91. .disposed(by: rx.reuseBag)
  92. model.key
  93. .bind(to: keyLabel.rx.text)
  94. .disposed(by: rx.reuseBag)
  95. model.state
  96. .subscribe { state in
  97. self.state = state
  98. } onError: { _ in }
  99. .disposed(by: rx.reuseBag)
  100. }
  101. }