// // XPMomentsTableViewCell.m // xplan-ios // // Created by 冯硕 on 2022/5/11. // #import "XPMomentsTableViewCell.h" ///Third #import ///Tool #import "NetImageView.h" #import "XPMomentsLayoutConfig.h" #import "SDPhotoBrowser.h" #import "XCCurrentVCStackManager.h" ///Model #import "MomentsInfoModel.h" ///View #import "XPMomentsUserInfoView.h" #import "XPMomentsPhotoView.h" #import "XPMomentsTooBarView.h" #import "XPMomentsTopicView.h" #import "XPMomentsContentView.h" #import "XPMomentsLayoutConfig.h" #import "XPMomentTopicContainerViewController.h" #import "XPMineUserInfoViewController.h" #import "XPRoomViewController.h" @interface XPMomentsTableViewCell () ///显示颜色的 有的时候stackView 不能显示颜色 @property (nonatomic,strong) UIView * backView; ///容器 @property (nonatomic,strong) UIStackView *stackView; ///用户信息 @property (nonatomic,strong) XPMomentsUserInfoView * userInfoView; ///显示内容的 @property (nonatomic,strong) XPMomentsContentView *textView; ///图片 @property (nonatomic,strong) XPMomentsPhotoView *photoView; ///显示底部的操作栏 @property (nonatomic,strong) XPMomentsTooBarView *toolBarView; ///话题 @property (nonatomic,strong) XPMomentsTopicView *topicView; @property (nonatomic,strong) UIView *lineView; @end @implementation XPMomentsTableViewCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { if ([reuseIdentifier isEqualToString:@"XPMomentsDynamicTableViewCell"]) { [self initDynamicSubViews]; [self initDynamicSubViewConstraints]; }else{ [self initSubViews]; [self initSubViewConstraints]; } } return self; } #pragma mark - Private Method - (void)initDynamicSubViews { self.backgroundColor = [UIColor clearColor]; self.selectionStyle = UITableViewCellSelectionStyleNone; [self.contentView addSubview:self.backView]; [self.backView addSubview:self.stackView]; [self.backView addSubview:self.toolBarView]; [self.stackView addArrangedSubview:self.textView]; [self.stackView addArrangedSubview:self.photoView]; [self.stackView addArrangedSubview:self.topicView]; [self.contentView addSubview:self.lineView]; } - (void)initDynamicSubViewConstraints { [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.mas_equalTo(15); make.trailing.mas_equalTo(-15); make.top.bottom.equalTo(self.contentView); }]; [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(20); }]; [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.mas_equalTo(self.backView).offset(12); make.trailing.mas_equalTo(self.backView).offset(-12); make.top.mas_equalTo(13); }]; [self.topicView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kMOMENTS_TEXT_TOPIC_HEIGHT); }]; [self.photoView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(KScreenWidth-30); }]; [self.toolBarView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.mas_equalTo(self.backView); make.top.mas_equalTo(self.stackView.mas_bottom).mas_offset(10); make.height.mas_equalTo(18); }]; [self.lineView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kGetScaleWidth(1)); make.leading.trailing.equalTo(self.toolBarView).inset(12); make.bottom.equalTo(self.contentView); }]; } - (void)initSubViews { self.backgroundColor = [UIColor clearColor]; self.selectionStyle = UITableViewCellSelectionStyleNone; [self.contentView addSubview:self.backView]; [self.backView addSubview:self.userInfoView]; [self.backView addSubview:self.stackView]; [self.backView addSubview:self.toolBarView]; [self.stackView addArrangedSubview:self.textView]; [self.stackView addArrangedSubview:self.photoView]; [self.stackView addArrangedSubview:self.topicView]; } - (void)initSubViewConstraints { [self.backView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self.contentView); }]; [self.userInfoView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.backView).offset(4); make.leading.trailing.mas_equalTo(self.backView); make.height.mas_equalTo(kMOMENTS_USER_INFO_HEIGHT); }]; [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(20); }]; [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.mas_equalTo(self.backView).offset(kMONENTS_CONTENT_LEFT_PADDING); make.trailing.mas_equalTo(self.backView).offset(-kMONENTS_CONTENT_RIGHT_PADDING); make.top.mas_equalTo(self.userInfoView.mas_bottom).offset(kMOMENTS_CONTENT_SPACAE_HEIGHT); }]; [self.topicView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kMOMENTS_TEXT_TOPIC_HEIGHT); }]; [self.toolBarView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.mas_equalTo(self.backView); make.top.mas_equalTo(self.stackView.mas_bottom); make.height.mas_equalTo(kMOMENTS_TOOL_BAR_HEIGHT); }]; } #pragma mark - XPMomentsUserInfoViewDelegate - (void)XPMomentsUserInfoView:(XPMomentsUserInfoView *)view didClickEnterRoom:(MomentsInfoModel *)momentsInfo { if (momentsInfo.inRoomUid.integerValue > 0) { [XPRoomViewController openRoom:momentsInfo.inRoomUid viewController:[XCCurrentVCStackManager shareManager].getCurrentVC]; } } - (void)XPMomentsUserInfoView:(XPMomentsUserInfoView *)view didClickAvatar:(MomentsInfoModel *)momentsInfo { XPMineUserInfoViewController * userInfoVC = [[XPMineUserInfoViewController alloc] init]; userInfoVC.uid = momentsInfo.uid.integerValue; [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:userInfoVC animated:YES]; } - (void)XPMomentsTooBarView:(XPMomentsUserInfoView *)view didClickDelete:(MomentsInfoModel *)momentsInfo { if (self.delegate && [self.delegate respondsToSelector:@selector(XPMomentsTableViewCell:didClicDelete:)]) { [self.delegate XPMomentsTableViewCell:self didClicDelete:momentsInfo]; } } #pragma mark - XPMomentsTooBarViewDelegate - (void)XPMomentsTooBarView:(XPMomentsTooBarView *)view didClickLike:(MomentsInfoModel *)momentsInfo { if (self.delegate && [self.delegate respondsToSelector:@selector(XPMomentsTableViewCell:didClickLike:)]) { [self.delegate XPMomentsTableViewCell:self didClickLike:momentsInfo]; } } - (void)XPMomentsTooBarView:(XPMomentsTooBarView *)view didClickCommon:(MomentsInfoModel *)momentsInfo { if (self.delegate && [self.delegate respondsToSelector:@selector(XPMomentsTableViewCell:didClicCommon:)]) { [self.delegate XPMomentsTableViewCell:self didClicCommon:momentsInfo]; } } - (void)XPMomentsTooBarView:(XPMomentsTooBarView *)view didClickShielding:(MomentsInfoModel *)momentsInfo{ if (self.delegate && [self.delegate respondsToSelector:@selector(XPMomentsTableViewCell:didClicShielding:)]) { [self.delegate XPMomentsTableViewCell:self didClicShielding:momentsInfo]; } } #pragma mark - XPMomentsContentViewDelegate - (void)xPMonentsContentView:(XPMomentsContentView *)view didClickFold:(MomentsInfoModel *)momentsInfo { if (self.delegate && [self.delegate respondsToSelector:@selector(XPMomentsTableViewCell:didClicFold:)]) { [self.delegate XPMomentsTableViewCell:self didClicFold:momentsInfo]; } } #pragma mark - SDPhotoBrowserDelegate - (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index { NSArray *list = self.momentsInfo != nil ? self.momentsInfo.dynamicResList : self.mineMomentsInfo.dynamicResList; if(index < list.count){ MomentsPicInfoModel *picInfo = [list xpSafeObjectAtIndex:index]; return [NSURL URLWithString:picInfo.resUrl]; } return [NSURL URLWithString:@""];; } - (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index { return [UIImageConstant defaultBannerPlaceholder]; } #pragma mark - XPMonentsPhotoViewDelegate - (void)xPMonentsPhotoView:(XPMomentsPhotoView *)view didClickImage:(NSInteger)index { NSInteger count = self.momentsInfo != nil ? self.momentsInfo.dynamicResList.count : self.mineMomentsInfo.dynamicResList.count; SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init]; browser.sourceImagesContainerView = self; browser.delegate = self; browser.imageCount = count; browser.currentImageIndex = index; browser.isMe = NO; [browser show]; } #pragma mark - Event Response - (void)didTapTopicRecognizer { long worldId = self.momentsInfo != nil ? self.momentsInfo.worldId : self.mineMomentsInfo.worldId; if (worldId > 0) { XPMomentTopicContainerViewController * topicListVC = [[XPMomentTopicContainerViewController alloc] init]; topicListVC.worldId = [NSString stringWithFormat:@"%ld", worldId]; [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:topicListVC animated:YES]; } } #pragma mark - Getters And Setters - (void)setIsFillet:(BOOL)isFillet{ _isFillet = isFillet; if(_isFillet == YES){ self.lineView.hidden = YES; [self.backView setCornerWithLeftTopCorner:0 rightTopCorner:0 bottomLeftCorner:8 bottomRightCorner:8 size:CGSizeMake(KScreenWidth-30, self.frame.size.height)]; }else{ self.lineView.hidden = NO; if(self.backView.layer.mask != nil){ self.backView.layer.mask = nil; } } } -(void)setMineMomentsInfo:(MomentsInfoModel *)mineMonentsInfo{ _mineMomentsInfo = mineMonentsInfo; if (_mineMomentsInfo) { self.userInfoView.momentsInfo = _mineMomentsInfo; self.textView.monentsInfo = _mineMomentsInfo; self.photoView.mineDynamicResList = _mineMomentsInfo.dynamicResList; self.topicView.monentsInfo = _mineMomentsInfo; self.toolBarView.momentsInfo = _mineMomentsInfo; if (_mineMomentsInfo.type == MomentsContentType_Picture) { self.photoView.hidden = NO; CGFloat picHeight = _mineMomentsInfo.picHeight <=0 ? [XPMomentsLayoutConfig momentsPicHeight:_mineMomentsInfo] : _mineMomentsInfo.picHeight; [self.photoView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(picHeight); }]; } else { self.photoView.hidden = YES; [self.photoView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(0); }]; } CGFloat contentHeight = [XPMomentsLayoutConfig momentsContentHeight:_mineMomentsInfo] + 24; self.topicView.hidden = _mineMomentsInfo.worldId <= 0; if(_mineMomentsInfo.squareTop && _mineMomentsInfo.content.length == 0){ [self.textView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(contentHeight + 20); }]; }else{ [self.textView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(contentHeight); }]; } } } - (void)setMomentsInfo:(MomentsInfoModel *)monentsInfo { _momentsInfo = monentsInfo; if (_momentsInfo) { self.userInfoView.momentsInfo = _momentsInfo; self.textView.isTopic = _isTopic; self.textView.monentsInfo = _momentsInfo; self.photoView.dynamicResList = _momentsInfo.dynamicResList; self.topicView.monentsInfo = _momentsInfo; self.toolBarView.momentsInfo = _momentsInfo; if (_momentsInfo.type == MomentsContentType_Picture) { self.photoView.hidden = NO; CGFloat picHeight = _momentsInfo.picHeight <=0 ? [XPMomentsLayoutConfig momentsPicHeight:_momentsInfo] : _momentsInfo.picHeight; [self.photoView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(picHeight); }]; } else { self.photoView.hidden = YES; [self.photoView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(0); }]; } CGFloat contentHeight = [XPMomentsLayoutConfig momentsContentHeight:_momentsInfo] + 24; self.topicView.hidden = monentsInfo.worldId <= 0; if(_momentsInfo.topicTop && _momentsInfo.content.length == 0){ [self.textView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(contentHeight + 20); }]; }else{ [self.textView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(contentHeight); }]; } } } - (UIView *)backView { if (!_backView) { _backView = [[UIView alloc] init]; _backView.backgroundColor = [DJDKMIMOMColor appCellBackgroundColor]; } return _backView; } - (XPMomentsUserInfoView *)userInfoView { if (!_userInfoView) { _userInfoView = [[XPMomentsUserInfoView alloc] init]; _userInfoView.delegate = self; } return _userInfoView; } - (XPMomentsPhotoView *)photoView { if (!_photoView) { _photoView = [[XPMomentsPhotoView alloc] init]; _photoView.delegate = self; } return _photoView; } - (UIStackView *)stackView { if (!_stackView) { _stackView = [[UIStackView alloc] init]; _stackView.axis = UILayoutConstraintAxisVertical; _stackView.distribution = UIStackViewDistributionFill; _stackView.alignment = UIStackViewAlignmentFill; _stackView.spacing = 8; } return _stackView; } - (XPMomentsContentView *)textView { if (!_textView) { _textView = [[XPMomentsContentView alloc] init]; _textView.delegate = self; } return _textView; } - (XPMomentsTopicView *)topicView { if (!_topicView) { _topicView = [[XPMomentsTopicView alloc] initWithFrame:CGRectZero]; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapTopicRecognizer)]; [_topicView addGestureRecognizer:tap]; } return _topicView; } - (XPMomentsTooBarView *)toolBarView { if (!_toolBarView) { if ([self.reuseIdentifier isEqualToString:@"XPMomentsDynamicTableViewCell"]){ _toolBarView = [[XPMomentsTooBarView alloc]initDynamicWithFrame:CGRectZero]; }else{ _toolBarView = [[XPMomentsTooBarView alloc] init]; } _toolBarView.delegate = self; } return _toolBarView; } - (UIView *)lineView{ if (!_lineView){ _lineView = [UIView new]; _lineView.backgroundColor = UIColorFromRGB(0xF7F7F7); } return _lineView; } @end