TUIMessageMultiChooseView.m 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. //
  2. // TUIMessageMultiChooseView.m
  3. // Pods
  4. //
  5. // Created by harvy on 2020/11/27.
  6. // Copyright © 2023 Tencent. All rights reserved.
  7. //
  8. #import "TUIMessageMultiChooseView.h"
  9. #import <TUICore/TUIDarkModel.h>
  10. #import <TUICore/TUIGlobalization.h>
  11. #import <TUICore/TUIThemeManager.h>
  12. #import <TUICore/UIView+TUILayout.h>
  13. #import <TIMCommon/TIMDefine.h>
  14. @interface TUIMessageMultiChooseView ()
  15. @property(nonatomic, strong) CALayer *separtorLayer;
  16. @end
  17. @implementation TUIMessageMultiChooseView
  18. - (instancetype)initWithFrame:(CGRect)frame {
  19. if (self = [super initWithFrame:frame]) {
  20. [self setupViews];
  21. }
  22. return self;
  23. }
  24. - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
  25. id hitView = [super hitTest:point withEvent:event];
  26. if (hitView == self) {
  27. return nil;
  28. } else {
  29. return hitView;
  30. }
  31. }
  32. - (void)layoutSubviews {
  33. [super layoutSubviews];
  34. CGFloat toolHeight = 44;
  35. CGFloat menuHeight = 54;
  36. CGFloat centerTopOffset = 0;
  37. CGFloat centerBottomOffset = 0;
  38. if (@available(iOS 11.0, *)) {
  39. toolHeight += self.safeAreaInsets.top;
  40. menuHeight += self.safeAreaInsets.bottom;
  41. centerTopOffset = self.safeAreaInsets.top;
  42. centerBottomOffset = self.safeAreaInsets.bottom;
  43. }
  44. self.toolView.frame = CGRectMake(0, 0, self.bounds.size.width, toolHeight);
  45. self.menuView.frame = CGRectMake(0, self.bounds.size.height - menuHeight, self.bounds.size.width, menuHeight);
  46. self.separtorLayer.frame = CGRectMake(0, 0, self.menuView.mm_w, 1);
  47. // toolView
  48. {
  49. CGFloat centerY = 0.5 * (self.toolView.bounds.size.height - self.cancelButton.bounds.size.height);
  50. self.cancelButton.frame = CGRectMake(10, centerY += 0.5 * centerTopOffset, self.cancelButton.bounds.size.width, self.cancelButton.bounds.size.height);
  51. [self.titleLabel sizeToFit];
  52. self.titleLabel.center = self.toolView.center;
  53. CGRect titleRect = self.self.titleLabel.frame;
  54. titleRect.origin.y += 0.5 * centerTopOffset;
  55. self.titleLabel.frame = titleRect;
  56. }
  57. // menuView
  58. {
  59. NSInteger count = self.menuView.subviews.count;
  60. CGFloat width = self.menuView.bounds.size.width / count;
  61. CGFloat height = (self.menuView.bounds.size.height - centerBottomOffset);
  62. for (int i = 0; i < self.menuView.subviews.count; i++) {
  63. UIView *sub = self.menuView.subviews[i];
  64. CGFloat centerY = (self.menuView.bounds.size.height - height) * 0.5;
  65. sub.frame = CGRectMake(i * width, centerY -= 0.5 * centerBottomOffset, width, height);
  66. }
  67. }
  68. if(isRTL()) {
  69. for (UIView *subview in self.toolView.subviews) {
  70. [subview resetFrameToFitRTL];
  71. }
  72. for (UIView *subview in self.menuView.subviews) {
  73. [subview resetFrameToFitRTL];
  74. }
  75. }
  76. }
  77. #pragma mark - Views
  78. - (void)setupViews {
  79. _toolView = [[UIView alloc] init];
  80. _toolView.backgroundColor = TIMCommonDynamicColor(@"head_bg_gradient_start_color", @"#EBF0F6");
  81. [self addSubview:_toolView];
  82. _menuView = [[UIView alloc] init];
  83. _menuView.backgroundColor = TUIChatDynamicColor(@"chat_controller_bg_color", @"#FFFFFF");
  84. [_menuView.layer addSublayer:self.separtorLayer];
  85. [self addSubview:_menuView];
  86. _cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
  87. [_cancelButton setTitle:TIMCommonLocalizableString(Cancel) forState:UIControlStateNormal];
  88. [_cancelButton setTitleColor:TIMCommonDynamicColor(@"form_title_color", @"#000000") forState:UIControlStateNormal];
  89. _cancelButton.titleLabel.font = [UIFont systemFontOfSize:15.0];
  90. [_cancelButton addTarget:self action:@selector(onCancel:) forControlEvents:UIControlEventTouchUpInside];
  91. [_cancelButton sizeToFit];
  92. [_toolView addSubview:_cancelButton];
  93. _titleLabel = [[UILabel alloc] init];
  94. _titleLabel.text = @"";
  95. _titleLabel.font = [UIFont boldSystemFontOfSize:17.0];
  96. _titleLabel.textColor = TIMCommonDynamicColor(@"form_title_color", @"#000000");
  97. [_toolView addSubview:_titleLabel];
  98. _relayButton = [UIButton buttonWithType:UIButtonTypeCustom];
  99. [_relayButton setTitle:TIMCommonLocalizableString(Forward) forState:UIControlStateNormal];
  100. _relayButton.titleLabel.font = [UIFont systemFontOfSize:14.0];
  101. [_relayButton setTitleColor:TIMCommonDynamicColor(@"form_title_color", @"#000000") forState:UIControlStateNormal];
  102. [_relayButton addTarget:self action:@selector(onRelay:) forControlEvents:UIControlEventTouchUpInside];
  103. [_menuView addSubview:_relayButton];
  104. _deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
  105. [_deleteButton setTitle:TIMCommonLocalizableString(Delete) forState:UIControlStateNormal];
  106. _deleteButton.titleLabel.font = [UIFont systemFontOfSize:14.0];
  107. [_deleteButton setTitleColor:TIMCommonDynamicColor(@"form_title_color", @"#000000") forState:UIControlStateNormal];
  108. [_deleteButton addTarget:self action:@selector(onDelete:) forControlEvents:UIControlEventTouchUpInside];
  109. [_menuView addSubview:_deleteButton];
  110. }
  111. #pragma mark - Action
  112. - (void)onCancel:(UIButton *)cancelButton {
  113. if (self.delegate && [self.delegate respondsToSelector:@selector(messageMultiChooseViewOnCancelClicked:)]) {
  114. [self.delegate messageMultiChooseViewOnCancelClicked:self];
  115. }
  116. }
  117. - (void)onRelay:(UIButton *)cancelButton {
  118. if (self.delegate && [self.delegate respondsToSelector:@selector(messageMultiChooseViewOnRelayClicked:)]) {
  119. [self.delegate messageMultiChooseViewOnRelayClicked:self];
  120. }
  121. }
  122. - (void)onDelete:(UIButton *)cancelButton {
  123. if (self.delegate && [self.delegate respondsToSelector:@selector(messageMultiChooseViewOnDeleteClicked:)]) {
  124. [self.delegate messageMultiChooseViewOnDeleteClicked:self];
  125. }
  126. }
  127. - (CALayer *)separtorLayer {
  128. if (_separtorLayer == nil) {
  129. _separtorLayer = [CALayer layer];
  130. _separtorLayer.backgroundColor = TIMCommonDynamicColor(@"separator_color", @"#DBDBDB").CGColor;
  131. }
  132. return _separtorLayer;
  133. }
  134. @end