// // YMTipsPopupView.m // MSYOUPAI // // Created by YoMi on 2024/2/8. // Copyright © 2024 MS. All rights reserved. // #import "YMTipsPopupView.h" @interface YMTipsPopupView () /** 标题标签*/ @property (nonatomic, strong) UILabel *titleLb; /** 提示文本*/ @property (nonatomic, strong) YYLabel *tipsLb; /** 按钮视图*/ @property (nonatomic, strong) UIView *buttonView; /** 取消按钮*/ @property (nonatomic, strong) UIButton *cancelBtn; /** 确认按钮*/ @property (nonatomic, strong) UIButton *confirmBtn; /** 单确认按钮*/ @property (nonatomic, strong) UIButton *singleConfirmBtn; @end @implementation YMTipsPopupView - (void)ym_setupViews{ self.backgroundColor = HexColorFromRGB(0xFFFFFF); self.titleText = @"提示"; self.titleFont = LCBoldFont(18); self.titleColor = HexColorFromRGB(0x333333); self.cancelBgColor = HexColorFromRGB(0xF5F5F5); self.confirmBgColor = MAINGRIDColor2; self.cancelTitleColor = HexColorFromRGB(0x555555); self.confirmTitleColor = HexColorFromRGB(0x000000); self.cancelFont = LCFont(14); self.confirmFont = LCFont(14); self.cancelTitle = @"取消"; self.confirmTitle = @"确定"; self.cancelRadius = 10; self.confirmRadius = 10; self.cancelBorderColor = HexColorFromRGB(0xF5F5F5); self.confirmBorderColor = UIColor.clearColor; self.cancelBorderWidth = 0.5; self.confirmBorderWidth = 0.5; [self addSubview:self.titleLb]; [self addSubview:self.tipsLb]; [self addSubview:self.buttonView]; [self.buttonView addSubview:self.cancelBtn]; [self.buttonView addSubview:self.confirmBtn]; [self addSubview:self.singleConfirmBtn]; [self setNeedsUpdateConstraints]; [self updateConstraintsIfNeeded]; } - (void)updateConstraints{ [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self).offset(adapt(15)); make.left.equalTo(self).offset(adapt(20)); make.right.equalTo(self).offset(adapt(-20)); make.height.mas_equalTo(adapt(20)); }]; [self.tipsLb mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.titleLb.mas_bottom).offset(adapt(10)).priorityLow(); make.left.equalTo(self).offset(adapt(20)); make.right.equalTo(self).offset(adapt(-20)); }]; [self.buttonView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.tipsLb.mas_bottom).offset(adapt(10)); make.left.equalTo(self); make.right.equalTo(self); make.bottom.equalTo(self).offset(adapt(-15)).priorityHigh(); }]; NSArray *btnArr = @[self.cancelBtn,self.confirmBtn]; // 实现masonry水平固定控件宽度方法 // axisType 横排还是竖排 // fixedSpacing 两个控件间隔 // leadSpacing 第一个控件与边缘的间隔 // tailSpacing 最后一个控件与边缘的间隔 [btnArr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:adapt(15) leadSpacing:adapt(20) tailSpacing:adapt(20)]; // 设置array的垂直方向的约束 [btnArr mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.buttonView); make.bottom.equalTo(self.buttonView); make.height.mas_equalTo(adapt(38)); }]; [self.singleConfirmBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.tipsLb.mas_bottom).offset(adapt(10)); make.left.equalTo(self).offset(adapt(45)); make.right.equalTo(self).offset(adapt(-45)); make.bottom.equalTo(self).offset(adapt(-15)).priorityHigh(); make.height.mas_equalTo(adapt(38)); }]; [super updateConstraints]; } - (void)configutationWithTips:(NSString*)tipsStr TipsAlignment:(NSTextAlignment)tipsAlignment IsHideTitle:(BOOL)isHideTitle IsHideSingleButton:(BOOL)isHideSingleButton{ [self judgeTitleIsHide:isHideTitle]; [self judgeSingleButtonIsHide:isHideSingleButton]; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:tipsStr]; attributedString.yy_font = LCFont(16); attributedString.yy_color = HexColorFromRGB(0x333333); attributedString.yy_lineSpacing = 10; attributedString.yy_alignment = tipsAlignment; self.tipsLb.attributedText = attributedString; CGSize introSize = CGSizeMake(kFrameWidth*0.8 - adapt(20)*2, CGFLOAT_MAX); YYTextLayout *layout = [YYTextLayout layoutWithContainerSize:introSize text:attributedString]; self.tipsLb.textLayout = layout; CGFloat tipsLbHeight = layout.textBoundingSize.height; [self.tipsLb mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(tipsLbHeight); }]; CGFloat titleLbHeight = [self.titleLb systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; CGFloat buttonViewHeight = isHideSingleButton ? [self.singleConfirmBtn systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height : [self.buttonView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; self.frame = CGRectMake(0, 0, kFrameWidth*0.8, adapt(15) + (isHideTitle ? 0 : titleLbHeight + adapt(10)) + tipsLbHeight + adapt(10) + buttonViewHeight + adapt(15)); } #pragma mark - 判断标题是否隐藏 - (void)judgeTitleIsHide:(BOOL)isHide{ self.titleLb.hidden = isHide; if (isHide) { [self.titleLb mas_remakeConstraints:^(MASConstraintMaker *make) { }]; [self.tipsLb mas_updateConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self).offset(adapt(15)); }]; }else{ [self.titleLb mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self).offset(adapt(15)); make.left.equalTo(self).offset(adapt(20)); make.right.equalTo(self).offset(adapt(-20)); }]; [self.tipsLb mas_updateConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.titleLb.mas_bottom).offset(adapt(10)); }]; } } #pragma mark - 判断单按钮是否隐藏 - (void)judgeSingleButtonIsHide:(BOOL)isHide{ self.singleConfirmBtn.hidden = isHide; if (isHide) { self.buttonView.hidden = NO; }else{ self.buttonView.hidden = YES; } } - (void)setTitleText:(NSString *)titleText{ _titleText = titleText; self.titleLb.text = titleText; } - (void)setTitleFont:(UIFont *)titleFont{ _titleFont = titleFont; self.titleLb.font = titleFont; } - (void)setTitleColor:(UIColor *)titleColor{ _titleColor = titleColor; self.titleLb.textColor = titleColor; } - (void)setCancelBgColor:(UIColor *)cancelBgColor{ _cancelBgColor = cancelBgColor; _cancelBtn.backgroundColor = cancelBgColor; } - (void)setConfirmBgColor:(UIColor *)confirmBgColor{ _confirmBgColor = confirmBgColor; self.confirmBtn.backgroundColor = confirmBgColor; self.singleConfirmBtn.backgroundColor = confirmBgColor; } - (void)setCancelTitleColor:(UIColor *)cancelTitleColor{ _cancelTitleColor = cancelTitleColor; [self.cancelBtn setTitleColor:cancelTitleColor forState:UIControlStateNormal]; } - (void)setConfirmTitleColor:(UIColor *)confirmTitleColor{ _confirmTitleColor = confirmTitleColor; [self.confirmBtn setTitleColor:confirmTitleColor forState:UIControlStateNormal]; [self.singleConfirmBtn setTitleColor:confirmTitleColor forState:UIControlStateNormal]; } - (void)setCancelFont:(UIFont *)cancelFont{ _cancelFont = cancelFont; self.cancelBtn.titleLabel.font = cancelFont; } - (void)setConfirmFont:(UIFont *)confirmFont{ _confirmFont = confirmFont; self.confirmBtn.titleLabel.font = confirmFont; self.singleConfirmBtn.titleLabel.font = confirmFont; } - (void)setCancelTitle:(NSString *)cancelTitle{ _cancelTitle = cancelTitle; [self.cancelBtn setTitle:cancelTitle forState:UIControlStateNormal]; } - (void)setConfirmTitle:(NSString *)confirmTitle{ _confirmTitle = confirmTitle; [self.confirmBtn setTitle:confirmTitle forState:UIControlStateNormal]; [self.singleConfirmBtn setTitle:confirmTitle forState:UIControlStateNormal]; } - (void)setCancelRadius:(CGFloat)cancelRadius{ _cancelRadius = cancelRadius; self.cancelBtn.layer.cornerRadius = cancelRadius; } - (void)setConfirmRadius:(CGFloat)confirmRadius{ _confirmRadius = confirmRadius; self.confirmBtn.layer.cornerRadius = confirmRadius; self.singleConfirmBtn.layer.cornerRadius = confirmRadius; } - (void)setCancelBorderColor:(UIColor *)cancelBorderColor{ _cancelBorderColor = cancelBorderColor; self.cancelBtn.layer.borderColor = cancelBorderColor.CGColor; } - (void)setConfirmBorderColor:(UIColor *)confirmBorderColor{ _confirmBorderColor = confirmBorderColor; self.confirmBtn.layer.borderColor = confirmBorderColor.CGColor; self.singleConfirmBtn.layer.borderColor = confirmBorderColor.CGColor; } - (void)setCancelBorderWidth:(CGFloat)cancelBorderWidth{ _cancelBorderWidth = cancelBorderWidth; self.cancelBtn.layer.borderWidth = cancelBorderWidth; } - (void)setConfirmBorderWidth:(CGFloat)confirmBorderWidth{ _confirmBorderWidth = confirmBorderWidth; self.confirmBtn.layer.borderWidth = confirmBorderWidth; self.singleConfirmBtn.layer.borderWidth = confirmBorderWidth; } - (UILabel *)titleLb{ if (!_titleLb) { _titleLb = [[UILabel alloc]init]; _titleLb.font = self.titleFont; _titleLb.textColor = self.titleColor; _titleLb.textAlignment = NSTextAlignmentCenter; _titleLb.text = self.titleText; } return _titleLb; } - (YYLabel *)tipsLb{ if (!_tipsLb) { _tipsLb = [[YYLabel alloc]init]; _tipsLb.font = LCFont(16); _tipsLb.textAlignment = NSTextAlignmentCenter; } return _tipsLb; } - (UIView *)buttonView{ if (!_buttonView) { _buttonView = [[UIView alloc]init]; } return _buttonView; } - (UIButton *)cancelBtn { if(!_cancelBtn){ _cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _cancelBtn.backgroundColor = self.cancelBgColor; _cancelBtn.titleLabel.font = self.cancelFont; [_cancelBtn setTitleColor:self.cancelTitleColor forState:UIControlStateNormal]; [_cancelBtn setTitle:self.cancelTitle forState:UIControlStateNormal]; _cancelBtn.layer.cornerRadius = self.cancelRadius; _cancelBtn.layer.borderWidth = self.cancelBorderWidth; _cancelBtn.layer.borderColor = self.cancelBorderColor.CGColor; WS(weakSelf) [[[_cancelBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { if (weakSelf.buttonBlock) { weakSelf.buttonBlock(NO); } }]; } return _cancelBtn; } - (UIButton *)confirmBtn { if(!_confirmBtn){ _confirmBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _confirmBtn.backgroundColor = self.confirmBgColor; _confirmBtn.titleLabel.font = self.confirmFont; [_confirmBtn setTitleColor:self.confirmTitleColor forState:UIControlStateNormal]; [_confirmBtn setTitle:self.confirmTitle forState:UIControlStateNormal]; _confirmBtn.layer.cornerRadius = self.confirmRadius; _confirmBtn.layer.borderWidth = self.confirmBorderWidth; _confirmBtn.layer.borderColor = self.confirmBorderColor.CGColor; WS(weakSelf) [[[_confirmBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { if (weakSelf.buttonBlock) { weakSelf.buttonBlock(YES); } }]; } return _confirmBtn; } - (UIButton *)singleConfirmBtn { if(!_singleConfirmBtn){ _singleConfirmBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _singleConfirmBtn.backgroundColor = self.confirmBgColor; _singleConfirmBtn.titleLabel.font = self.confirmFont; [_singleConfirmBtn setTitleColor:self.confirmTitleColor forState:UIControlStateNormal]; [_singleConfirmBtn setTitle:self.confirmTitle forState:UIControlStateNormal]; _singleConfirmBtn.layer.cornerRadius = self.confirmRadius; _singleConfirmBtn.layer.borderWidth = self.confirmBorderWidth; _singleConfirmBtn.layer.borderColor = self.confirmBorderColor.CGColor; WS(weakSelf) [[[_singleConfirmBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) { if (weakSelf.buttonBlock) { weakSelf.buttonBlock(YES); } }]; } return _singleConfirmBtn; } @end