// // XPMonentsContentView.m // xplan-ios // // Created by 冯硕 on 2022/5/13. // #import "XPMonentsContentView.h" ///Third #import #import ///Tool #import "ThemeColor.h" #import "XPMonentsLayoutConfig.h" #import "UIButton+EnlargeTouchArea.h" ///Model #import "MonentsInfoModel.h" @interface XPMonentsContentView () ///容器 @property (nonatomic,strong) UIStackView *stackView; ///显示内容 @property (nonatomic,strong) UILabel *contentLabel; ///折叠的按钮 @property (nonatomic,strong) UIButton *foldButton; @end @implementation XPMonentsContentView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self initSubViews]; [self initSubViewConstraints]; } return self; } #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.stackView]; [self.stackView addArrangedSubview:self.contentLabel]; [self.stackView addArrangedSubview:self.foldButton]; } - (void)initSubViewConstraints { [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self); }]; [self.foldButton mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); }]; } - (NSAttributedString *)createMonentsContentAttribute { NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; if (self.monentsInfo.squareTop ) {//动态/广场 NSTextAttachment * attachment = [[NSTextAttachment alloc] init]; attachment.bounds = CGRectMake(0, 0, 10, 12); attachment.image = [UIImage imageNamed:@"monents_info_top"]; NSAttributedString * starAttribute = [NSMutableAttributedString attributedStringWithAttachment:(NSTextAttachment *)attachment]; [attributedString insertAttributedString:starAttribute atIndex:0]; //将图片插入到合适的位置 [attributedString appendAttributedString:[self creatStrAttrByStr:@"置顶 " attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15], NSForegroundColorAttributeName: UIColorFromRGB(0xE84C46)}]]; } [attributedString appendAttributedString:[self creatStrAttrByStr:self.monentsInfo.content attributed:@{NSFontAttributeName : [UIFont systemFontOfSize:15]}]]; attributedString.yy_lineSpacing = 5; return attributedString; } - (NSMutableAttributedString *)creatStrAttrByStr:(NSString *)str attributed:(NSDictionary *)attribute{ if (str.length == 0 || !str) { str = @" "; } NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:str attributes:attribute]; return attr; } #pragma mark - Event Response - (void)didClickFoldButton:(UIButton *)sender { self.monentsInfo.isFold = sender.selected; sender.selected = !sender.selected; if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsContentView:didClickFold:)]) { [self.delegate xPMonentsContentView:self didClickFold:self.monentsInfo]; } } #pragma mark - Getters And Setters - (void)setMonentsInfo:(MonentsInfoModel *)monentsInfo { _monentsInfo = monentsInfo; if (_monentsInfo) { self.contentLabel.attributedText = [self createMonentsContentAttribute]; self.foldButton.selected = !_monentsInfo.isFold; if (monentsInfo.numberOfText <= 0) { YYTextContainer *container = [YYTextContainer new]; container.size = CGSizeMake(kMONENTS_CONTENT_MAX_WIDTH, CGFLOAT_MAX); container.maximumNumberOfRows = 0; YYTextLayout * layout = [YYTextLayout layoutWithContainer:container text:self.contentLabel.attributedText]; if (layout.rowCount > 6) { self.foldButton.hidden = NO; [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); }]; } else { self.foldButton.hidden = YES; [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(0); }]; } } else { if (monentsInfo.numberOfText > 6) { self.foldButton.hidden = NO; [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kMONENTS_FOLD_HEIGHT); }]; } else { self.foldButton.hidden = YES; [self.foldButton mas_remakeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(0); }]; } } } } - (UIStackView *)stackView { if (!_stackView) { _stackView = [[UIStackView alloc] init]; _stackView.axis = UILayoutConstraintAxisVertical; _stackView.distribution = UIStackViewDistributionFill; _stackView.alignment = UIStackViewAlignmentLeading; } return _stackView; } - (UIButton *)foldButton { if (_foldButton == nil) { _foldButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_foldButton setTitle:@"展开" forState:UIControlStateNormal]; [_foldButton setTitle:@"收起" forState:UIControlStateSelected]; [_foldButton setTitleColor:UIColorFromRGB(0x34A7FF) forState:UIControlStateNormal]; [_foldButton setTitleColor:UIColorFromRGB(0x34A7FF) forState:UIControlStateSelected]; _foldButton.titleLabel.font = [UIFont systemFontOfSize:15]; _foldButton.hidden = YES; [_foldButton addTarget:self action:@selector(didClickFoldButton:) forControlEvents:UIControlEventTouchUpInside]; } return _foldButton; } - (UILabel *)contentLabel { if (!_contentLabel) { _contentLabel = [[UILabel alloc] init]; _contentLabel.numberOfLines = 0; _contentLabel.font = [UIFont systemFontOfSize:15]; _contentLabel.textColor = UIColorRGBAlpha(0x333333, 1); _contentLabel.preferredMaxLayoutWidth = kMONENTS_CONTENT_MAX_WIDTH; _contentLabel.lineBreakMode = NSLineBreakByCharWrapping; } return _contentLabel; } @end