GroupNameCell.swift 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import UIKit
  2. class GroupLabelCell: UITableViewCell {
  3. var groupBadgeSize: CGFloat = 54
  4. var onTextChanged: ((String) -> Void)? // use this callback to update editButton in navigationController
  5. lazy var groupBadge: InitialsBadge = {
  6. let badge = InitialsBadge(size: groupBadgeSize)
  7. badge.layer.cornerRadius = groupBadgeSize / 2
  8. badge.clipsToBounds = true
  9. badge.setColor(UIColor.lightGray)
  10. return badge
  11. }()
  12. lazy var inputField: UITextField = {
  13. let textField = UITextField()
  14. textField.placeholder = "Group Name"
  15. textField.borderStyle = .none
  16. textField.becomeFirstResponder()
  17. textField.autocorrectionType = .no
  18. textField.addTarget(self, action: #selector(nameFieldChanged), for: .editingChanged)
  19. return textField
  20. }()
  21. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  22. super.init(style: style, reuseIdentifier: reuseIdentifier)
  23. setupSubviews()
  24. }
  25. required init?(coder _: NSCoder) {
  26. fatalError("init(coder:) has not been implemented")
  27. }
  28. private func setupSubviews() {
  29. contentView.addSubview(groupBadge)
  30. groupBadge.translatesAutoresizingMaskIntoConstraints = false
  31. groupBadge.leadingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.leadingAnchor, constant: 0).isActive = true
  32. groupBadge.topAnchor.constraint(equalTo: contentView.layoutMarginsGuide.topAnchor, constant: 5).isActive = true
  33. groupBadge.bottomAnchor.constraint(equalTo: contentView.layoutMarginsGuide.bottomAnchor, constant: -5).isActive = true
  34. groupBadge.widthAnchor.constraint(equalToConstant: groupBadgeSize).isActive = true
  35. groupBadge.heightAnchor.constraint(equalToConstant: groupBadgeSize).isActive = true
  36. contentView.addSubview(inputField)
  37. inputField.translatesAutoresizingMaskIntoConstraints = false
  38. inputField.leadingAnchor.constraint(equalTo: groupBadge.trailingAnchor, constant: 15).isActive = true
  39. inputField.heightAnchor.constraint(equalToConstant: 45).isActive = true
  40. inputField.centerYAnchor.constraint(equalTo: groupBadge.centerYAnchor, constant: 0).isActive = true
  41. inputField.trailingAnchor.constraint(equalTo: contentView.layoutMarginsGuide.trailingAnchor, constant: 0).isActive = true
  42. }
  43. @objc func nameFieldChanged() {
  44. let groupName = inputField.text ?? ""
  45. groupBadge.setName(groupName)
  46. onTextChanged?(groupName)
  47. }
  48. func getGroupName() -> String {
  49. return inputField.text ?? ""
  50. }
  51. }