// // XPMonentsTableViewCell.m // xplan-ios // // Created by 冯硕 on 2022/5/11. // #import "XPMonentsTableViewCell.h" ///Third #import ///Tool #import "ThemeColor.h" #import "NetImageView.h" #import "XPMonentsLayoutConfig.h" #import "SDPhotoBrowser.h" #import "XCCurrentVCStackManager.h" ///Model #import "MonentsInfoModel.h" ///View #import "XPMonentsUserInfoView.h" #import "XPMonentsPhotoView.h" #import "XPMonentsTooBarView.h" #import "XPMoentsTopicView.h" #import "XPMonentsContentView.h" #import "XPMonentsLayoutConfig.h" #import "XPMonentTopicContainerViewController.h" #import "XPMineUserInfoViewController.h" #import "XPRoomViewController.h" @interface XPMonentsTableViewCell () ///显示颜色的 有的时候stackView 不能显示颜色 @property (nonatomic,strong) UIView * backView; ///容器 @property (nonatomic,strong) UIStackView *stackView; ///用户信息 @property (nonatomic,strong) XPMonentsUserInfoView * userInfoView; ///显示内容的 @property (nonatomic,strong) XPMonentsContentView *textView; ///图片 @property (nonatomic,strong) XPMonentsPhotoView *photoView; ///显示底部的操作栏 @property (nonatomic,strong) XPMonentsTooBarView *toolBarView; ///话题 @property (nonatomic,strong) XPMoentsTopicView *topicView; @end @implementation XPMonentsTableViewCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { [self initSubViews]; [self initSubViewConstraints]; } return self; } #pragma mark - Private Method - (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.left.right.top.mas_equalTo(self.backView); make.height.mas_equalTo(kMONENTS_USER_INFO_HEIGHT); }]; [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(20); }]; [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.backView).offset(kMONENTS_CONTENT_LEFT_PADDING); make.right.mas_equalTo(self.backView).offset(-kMONENTS_CONTENT_RIGHT_PADDING); make.top.mas_equalTo(self.userInfoView.mas_bottom).offset(kMONENTS_CONTENT_SPACAE_HEIGHT); }]; [self.topicView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(kMONENTS_TEXT_TOPIC_HEIGHT); }]; [self.toolBarView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.mas_equalTo(self.backView); make.top.mas_equalTo(self.stackView.mas_bottom); make.height.mas_equalTo(kMONENTS_TOOL_BAR_HEIGHT); }]; } #pragma mark - XPMonentsUserInfoViewDelegate - (void)xPMonentsUserInfoView:(XPMonentsUserInfoView *)view didClickEnterRoom:(MonentsInfoModel *)monents { if (monents.inRoomUid.integerValue > 0) { [XPRoomViewController openRoom:monents.inRoomUid viewController:[XCCurrentVCStackManager shareManager].getCurrentVC]; } } - (void)xPMonentsUserInfoView:(XPMonentsUserInfoView *)view didClickAvatar:(MonentsInfoModel *)monents { XPMineUserInfoViewController * userInfoVC = [[XPMineUserInfoViewController alloc] init]; userInfoVC.uid = monents.uid.integerValue; [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:userInfoVC animated:YES]; } #pragma mark - XPMonentsTooBarViewDelegate - (void)xPMonentsTooBarView:(XPMonentsTooBarView *)view didClickLike:(MonentsInfoModel *)monentsInfo { if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsTableViewCell:didClickLike:)]) { [self.delegate xPMonentsTableViewCell:self didClickLike:monentsInfo]; } } - (void)xPMonentsTooBarView:(XPMonentsTooBarView *)view didClickDelete:(MonentsInfoModel *)monentsInfo { if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsTableViewCell:didClicDelete:)]) { [self.delegate xPMonentsTableViewCell:self didClicDelete:self.monentsInfo]; } } - (void)xPMonentsTooBarView:(XPMonentsTooBarView *)view didClickCommon:(MonentsInfoModel *)monentsInfo { if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsTableViewCell:didClicCommon:)]) { [self.delegate xPMonentsTableViewCell:self didClicCommon:self.monentsInfo]; } } #pragma mark - XPMonentsContentViewDelegate - (void)xPMonentsContentView:(XPMonentsContentView *)view didClickFold:(MonentsInfoModel *)monentsInfo { if (self.delegate && [self.delegate respondsToSelector:@selector(xPMonentsTableViewCell:didClicFold:)]) { [self.delegate xPMonentsTableViewCell:self didClicFold:monentsInfo]; } } #pragma mark - SDPhotoBrowserDelegate - (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index { MonentsPicInfoModel *picinfo = [self.monentsInfo.dynamicResList objectAtIndex:index]; return [NSURL URLWithString:picinfo.resUrl]; } - (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index { return [UIImageConstant defalutBannerPlaceholder]; } #pragma mark - XPMonentsPhotoViewDelegate - (void)xPMonentsPhotoView:(XPMonentsPhotoView *)view didClickImage:(NSInteger)index { NSInteger count = self.monentsInfo.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 { if (self.monentsInfo.worldId > 0) { XPMonentTopicContainerViewController * topicListVC = [[XPMonentTopicContainerViewController alloc] init]; topicListVC.worldId = [NSString stringWithFormat:@"%ld", self.monentsInfo.worldId]; [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:topicListVC animated:YES]; } } #pragma mark - Getters And Setters - (void)setMonentsInfo:(MonentsInfoModel *)monentsInfo { _monentsInfo = monentsInfo; if (_monentsInfo) { self.userInfoView.monentsInfo = _monentsInfo; self.textView.monentsInfo = _monentsInfo; self.photoView.dynamicResList = _monentsInfo.dynamicResList; self.topicView.monentsInfo = _monentsInfo; self.toolBarView.monentsInfo = _monentsInfo; if (_monentsInfo.type == MonentsContentType_Picture) { self.photoView.hidden = NO; CGFloat picHeight = _monentsInfo.picHeight <=0 ? [XPMonentsLayoutConfig monentsPicHeight:_monentsInfo] : _monentsInfo.picHeight; [self.photoView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(picHeight); }]; } else { self.photoView.hidden = NO; [self.photoView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(0); }]; } CGFloat contentHeight = _monentsInfo.contentHeight <=0 ? [XPMonentsLayoutConfig monentsContentHeight:_monentsInfo] : _monentsInfo.contentHeight; [self.textView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(contentHeight); }]; } } - (UIView *)backView { if (!_backView) { _backView = [[UIView alloc] init]; _backView.backgroundColor = [ThemeColor appCellBackgroundColor]; } return _backView; } - (XPMonentsUserInfoView *)userInfoView { if (!_userInfoView) { _userInfoView = [[XPMonentsUserInfoView alloc] init]; _userInfoView.delegate = self; } return _userInfoView; } - (XPMonentsPhotoView *)photoView { if (!_photoView) { _photoView = [[XPMonentsPhotoView 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 = kMONENTS_CONTENT_SPACAE_HEIGHT; } return _stackView; } - (XPMonentsContentView *)textView { if (!_textView) { _textView = [[XPMonentsContentView alloc] init]; _textView.delegate = self; } return _textView; } - (XPMoentsTopicView *)topicView { if (!_topicView) { _topicView = [[XPMoentsTopicView alloc] init]; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapTopicRecognizer)]; [_topicView addGestureRecognizer:tap]; } return _topicView; } - (XPMonentsTooBarView *)toolBarView { if (!_toolBarView) { _toolBarView = [[XPMonentsTooBarView alloc] init]; _toolBarView.delegate = self; } return _toolBarView; } @end