YMTipsPopupView.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. //
  2. // YMTipsPopupView.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/8.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMTipsPopupView.h"
  9. @interface YMTipsPopupView ()
  10. /** 标题标签*/
  11. @property (nonatomic, strong) UILabel *titleLb;
  12. /** 提示文本*/
  13. @property (nonatomic, strong) YYLabel *tipsLb;
  14. /** 按钮视图*/
  15. @property (nonatomic, strong) UIView *buttonView;
  16. /** 取消按钮*/
  17. @property (nonatomic, strong) UIButton *cancelBtn;
  18. /** 确认按钮*/
  19. @property (nonatomic, strong) UIButton *confirmBtn;
  20. /** 单确认按钮*/
  21. @property (nonatomic, strong) UIButton *singleConfirmBtn;
  22. @end
  23. @implementation YMTipsPopupView
  24. - (void)ym_setupViews{
  25. self.backgroundColor = HexColorFromRGB(0xFFFFFF);
  26. self.titleText = @"提示";
  27. self.titleFont = LCBoldFont(18);
  28. self.titleColor = HexColorFromRGB(0x333333);
  29. self.cancelBgColor = HexColorFromRGB(0xF5F5F5);
  30. self.confirmBgColor = MAINGRIDColor2;
  31. self.cancelTitleColor = HexColorFromRGB(0x555555);
  32. self.confirmTitleColor = HexColorFromRGB(0x000000);
  33. self.cancelFont = LCFont(14);
  34. self.confirmFont = LCFont(14);
  35. self.cancelTitle = @"取消";
  36. self.confirmTitle = @"确定";
  37. self.cancelRadius = 10;
  38. self.confirmRadius = 10;
  39. self.cancelBorderColor = HexColorFromRGB(0xF5F5F5);
  40. self.confirmBorderColor = UIColor.clearColor;
  41. self.cancelBorderWidth = 0.5;
  42. self.confirmBorderWidth = 0.5;
  43. [self addSubview:self.titleLb];
  44. [self addSubview:self.tipsLb];
  45. [self addSubview:self.buttonView];
  46. [self.buttonView addSubview:self.cancelBtn];
  47. [self.buttonView addSubview:self.confirmBtn];
  48. [self addSubview:self.singleConfirmBtn];
  49. [self setNeedsUpdateConstraints];
  50. [self updateConstraintsIfNeeded];
  51. }
  52. - (void)updateConstraints{
  53. [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
  54. make.top.equalTo(self).offset(adapt(15));
  55. make.left.equalTo(self).offset(adapt(20));
  56. make.right.equalTo(self).offset(adapt(-20));
  57. make.height.mas_equalTo(adapt(20));
  58. }];
  59. [self.tipsLb mas_makeConstraints:^(MASConstraintMaker *make) {
  60. make.top.equalTo(self.titleLb.mas_bottom).offset(adapt(10)).priorityLow();
  61. make.left.equalTo(self).offset(adapt(20));
  62. make.right.equalTo(self).offset(adapt(-20));
  63. }];
  64. [self.buttonView mas_makeConstraints:^(MASConstraintMaker *make) {
  65. make.top.equalTo(self.tipsLb.mas_bottom).offset(adapt(10));
  66. make.left.equalTo(self);
  67. make.right.equalTo(self);
  68. make.bottom.equalTo(self).offset(adapt(-15)).priorityHigh();
  69. }];
  70. NSArray *btnArr = @[self.cancelBtn,self.confirmBtn];
  71. // 实现masonry水平固定控件宽度方法
  72. // axisType 横排还是竖排
  73. // fixedSpacing 两个控件间隔
  74. // leadSpacing 第一个控件与边缘的间隔
  75. // tailSpacing 最后一个控件与边缘的间隔
  76. [btnArr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:adapt(15) leadSpacing:adapt(20) tailSpacing:adapt(20)];
  77. // 设置array的垂直方向的约束
  78. [btnArr mas_makeConstraints:^(MASConstraintMaker *make) {
  79. make.top.equalTo(self.buttonView);
  80. make.bottom.equalTo(self.buttonView);
  81. make.height.mas_equalTo(adapt(38));
  82. }];
  83. [self.singleConfirmBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  84. make.top.equalTo(self.tipsLb.mas_bottom).offset(adapt(10));
  85. make.left.equalTo(self).offset(adapt(45));
  86. make.right.equalTo(self).offset(adapt(-45));
  87. make.bottom.equalTo(self).offset(adapt(-15)).priorityHigh();
  88. make.height.mas_equalTo(adapt(38));
  89. }];
  90. [super updateConstraints];
  91. }
  92. - (void)configutationWithTips:(NSString*)tipsStr TipsAlignment:(NSTextAlignment)tipsAlignment IsHideTitle:(BOOL)isHideTitle IsHideSingleButton:(BOOL)isHideSingleButton{
  93. [self judgeTitleIsHide:isHideTitle];
  94. [self judgeSingleButtonIsHide:isHideSingleButton];
  95. NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:tipsStr];
  96. attributedString.yy_font = LCFont(16);
  97. attributedString.yy_color = HexColorFromRGB(0x333333);
  98. attributedString.yy_lineSpacing = 10;
  99. attributedString.yy_alignment = tipsAlignment;
  100. self.tipsLb.attributedText = attributedString;
  101. CGSize introSize = CGSizeMake(kFrameWidth*0.8 - adapt(20)*2, CGFLOAT_MAX);
  102. YYTextLayout *layout = [YYTextLayout layoutWithContainerSize:introSize text:attributedString];
  103. self.tipsLb.textLayout = layout;
  104. CGFloat tipsLbHeight = layout.textBoundingSize.height;
  105. [self.tipsLb mas_updateConstraints:^(MASConstraintMaker *make) {
  106. make.height.mas_equalTo(tipsLbHeight);
  107. }];
  108. CGFloat titleLbHeight = [self.titleLb systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
  109. CGFloat buttonViewHeight = isHideSingleButton ? [self.singleConfirmBtn systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height : [self.buttonView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
  110. self.frame = CGRectMake(0, 0, kFrameWidth*0.8, adapt(15) + (isHideTitle ? 0 : titleLbHeight + adapt(10)) + tipsLbHeight + adapt(10) + buttonViewHeight + adapt(15));
  111. }
  112. #pragma mark - 判断标题是否隐藏
  113. - (void)judgeTitleIsHide:(BOOL)isHide{
  114. self.titleLb.hidden = isHide;
  115. if (isHide) {
  116. [self.titleLb mas_remakeConstraints:^(MASConstraintMaker *make) {
  117. }];
  118. [self.tipsLb mas_updateConstraints:^(MASConstraintMaker *make) {
  119. make.top.equalTo(self).offset(adapt(15));
  120. }];
  121. }else{
  122. [self.titleLb mas_remakeConstraints:^(MASConstraintMaker *make) {
  123. make.top.equalTo(self).offset(adapt(15));
  124. make.left.equalTo(self).offset(adapt(20));
  125. make.right.equalTo(self).offset(adapt(-20));
  126. }];
  127. [self.tipsLb mas_updateConstraints:^(MASConstraintMaker *make) {
  128. make.top.equalTo(self.titleLb.mas_bottom).offset(adapt(10));
  129. }];
  130. }
  131. }
  132. #pragma mark - 判断单按钮是否隐藏
  133. - (void)judgeSingleButtonIsHide:(BOOL)isHide{
  134. self.singleConfirmBtn.hidden = isHide;
  135. if (isHide) {
  136. self.buttonView.hidden = NO;
  137. }else{
  138. self.buttonView.hidden = YES;
  139. }
  140. }
  141. - (void)setTitleText:(NSString *)titleText{
  142. _titleText = titleText;
  143. self.titleLb.text = titleText;
  144. }
  145. - (void)setTitleFont:(UIFont *)titleFont{
  146. _titleFont = titleFont;
  147. self.titleLb.font = titleFont;
  148. }
  149. - (void)setTitleColor:(UIColor *)titleColor{
  150. _titleColor = titleColor;
  151. self.titleLb.textColor = titleColor;
  152. }
  153. - (void)setCancelBgColor:(UIColor *)cancelBgColor{
  154. _cancelBgColor = cancelBgColor;
  155. _cancelBtn.backgroundColor = cancelBgColor;
  156. }
  157. - (void)setConfirmBgColor:(UIColor *)confirmBgColor{
  158. _confirmBgColor = confirmBgColor;
  159. self.confirmBtn.backgroundColor = confirmBgColor;
  160. self.singleConfirmBtn.backgroundColor = confirmBgColor;
  161. }
  162. - (void)setCancelTitleColor:(UIColor *)cancelTitleColor{
  163. _cancelTitleColor = cancelTitleColor;
  164. [self.cancelBtn setTitleColor:cancelTitleColor forState:UIControlStateNormal];
  165. }
  166. - (void)setConfirmTitleColor:(UIColor *)confirmTitleColor{
  167. _confirmTitleColor = confirmTitleColor;
  168. [self.confirmBtn setTitleColor:confirmTitleColor forState:UIControlStateNormal];
  169. [self.singleConfirmBtn setTitleColor:confirmTitleColor forState:UIControlStateNormal];
  170. }
  171. - (void)setCancelFont:(UIFont *)cancelFont{
  172. _cancelFont = cancelFont;
  173. self.cancelBtn.titleLabel.font = cancelFont;
  174. }
  175. - (void)setConfirmFont:(UIFont *)confirmFont{
  176. _confirmFont = confirmFont;
  177. self.confirmBtn.titleLabel.font = confirmFont;
  178. self.singleConfirmBtn.titleLabel.font = confirmFont;
  179. }
  180. - (void)setCancelTitle:(NSString *)cancelTitle{
  181. _cancelTitle = cancelTitle;
  182. [self.cancelBtn setTitle:cancelTitle forState:UIControlStateNormal];
  183. }
  184. - (void)setConfirmTitle:(NSString *)confirmTitle{
  185. _confirmTitle = confirmTitle;
  186. [self.confirmBtn setTitle:confirmTitle forState:UIControlStateNormal];
  187. [self.singleConfirmBtn setTitle:confirmTitle forState:UIControlStateNormal];
  188. }
  189. - (void)setCancelRadius:(CGFloat)cancelRadius{
  190. _cancelRadius = cancelRadius;
  191. self.cancelBtn.layer.cornerRadius = cancelRadius;
  192. }
  193. - (void)setConfirmRadius:(CGFloat)confirmRadius{
  194. _confirmRadius = confirmRadius;
  195. self.confirmBtn.layer.cornerRadius = confirmRadius;
  196. self.singleConfirmBtn.layer.cornerRadius = confirmRadius;
  197. }
  198. - (void)setCancelBorderColor:(UIColor *)cancelBorderColor{
  199. _cancelBorderColor = cancelBorderColor;
  200. self.cancelBtn.layer.borderColor = cancelBorderColor.CGColor;
  201. }
  202. - (void)setConfirmBorderColor:(UIColor *)confirmBorderColor{
  203. _confirmBorderColor = confirmBorderColor;
  204. self.confirmBtn.layer.borderColor = confirmBorderColor.CGColor;
  205. self.singleConfirmBtn.layer.borderColor = confirmBorderColor.CGColor;
  206. }
  207. - (void)setCancelBorderWidth:(CGFloat)cancelBorderWidth{
  208. _cancelBorderWidth = cancelBorderWidth;
  209. self.cancelBtn.layer.borderWidth = cancelBorderWidth;
  210. }
  211. - (void)setConfirmBorderWidth:(CGFloat)confirmBorderWidth{
  212. _confirmBorderWidth = confirmBorderWidth;
  213. self.confirmBtn.layer.borderWidth = confirmBorderWidth;
  214. self.singleConfirmBtn.layer.borderWidth = confirmBorderWidth;
  215. }
  216. - (UILabel *)titleLb{
  217. if (!_titleLb) {
  218. _titleLb = [[UILabel alloc]init];
  219. _titleLb.font = self.titleFont;
  220. _titleLb.textColor = self.titleColor;
  221. _titleLb.textAlignment = NSTextAlignmentCenter;
  222. _titleLb.text = self.titleText;
  223. }
  224. return _titleLb;
  225. }
  226. - (YYLabel *)tipsLb{
  227. if (!_tipsLb) {
  228. _tipsLb = [[YYLabel alloc]init];
  229. _tipsLb.font = LCFont(16);
  230. _tipsLb.textAlignment = NSTextAlignmentCenter;
  231. }
  232. return _tipsLb;
  233. }
  234. - (UIView *)buttonView{
  235. if (!_buttonView) {
  236. _buttonView = [[UIView alloc]init];
  237. }
  238. return _buttonView;
  239. }
  240. - (UIButton *)cancelBtn {
  241. if(!_cancelBtn){
  242. _cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  243. _cancelBtn.backgroundColor = self.cancelBgColor;
  244. _cancelBtn.titleLabel.font = self.cancelFont;
  245. [_cancelBtn setTitleColor:self.cancelTitleColor forState:UIControlStateNormal];
  246. [_cancelBtn setTitle:self.cancelTitle forState:UIControlStateNormal];
  247. _cancelBtn.layer.cornerRadius = self.cancelRadius;
  248. _cancelBtn.layer.borderWidth = self.cancelBorderWidth;
  249. _cancelBtn.layer.borderColor = self.cancelBorderColor.CGColor;
  250. WS(weakSelf)
  251. [[[_cancelBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  252. if (weakSelf.buttonBlock) {
  253. weakSelf.buttonBlock(NO);
  254. }
  255. }];
  256. }
  257. return _cancelBtn;
  258. }
  259. - (UIButton *)confirmBtn {
  260. if(!_confirmBtn){
  261. _confirmBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  262. _confirmBtn.backgroundColor = self.confirmBgColor;
  263. _confirmBtn.titleLabel.font = self.confirmFont;
  264. [_confirmBtn setTitleColor:self.confirmTitleColor forState:UIControlStateNormal];
  265. [_confirmBtn setTitle:self.confirmTitle forState:UIControlStateNormal];
  266. _confirmBtn.layer.cornerRadius = self.confirmRadius;
  267. _confirmBtn.layer.borderWidth = self.confirmBorderWidth;
  268. _confirmBtn.layer.borderColor = self.confirmBorderColor.CGColor;
  269. WS(weakSelf)
  270. [[[_confirmBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  271. if (weakSelf.buttonBlock) {
  272. weakSelf.buttonBlock(YES);
  273. }
  274. }];
  275. }
  276. return _confirmBtn;
  277. }
  278. - (UIButton *)singleConfirmBtn {
  279. if(!_singleConfirmBtn){
  280. _singleConfirmBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  281. _singleConfirmBtn.backgroundColor = self.confirmBgColor;
  282. _singleConfirmBtn.titleLabel.font = self.confirmFont;
  283. [_singleConfirmBtn setTitleColor:self.confirmTitleColor forState:UIControlStateNormal];
  284. [_singleConfirmBtn setTitle:self.confirmTitle forState:UIControlStateNormal];
  285. _singleConfirmBtn.layer.cornerRadius = self.confirmRadius;
  286. _singleConfirmBtn.layer.borderWidth = self.confirmBorderWidth;
  287. _singleConfirmBtn.layer.borderColor = self.confirmBorderColor.CGColor;
  288. WS(weakSelf)
  289. [[[_singleConfirmBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {
  290. if (weakSelf.buttonBlock) {
  291. weakSelf.buttonBlock(YES);
  292. }
  293. }];
  294. }
  295. return _singleConfirmBtn;
  296. }
  297. @end