Files
my_yuyin/QXLive/Dynamic(语圈)/View/QXDynamicListCell.m
2025-09-22 18:48:29 +08:00

421 lines
17 KiB
Objective-C
Executable File

//
// QXDynamicListCell.m
// SweetParty
//
// Created by bj_szd on 2022/6/1.
//
#import "QXDynamicListCell.h"
//#import "UILabel+ChangeSpace.h"
//#import "KNPhotoBrowser.h"
//#import "SPTrendReportVC.h"
#import "QXSendGiftView.h"
#import "YBImageBrowser.h"
#import "QXDynamicNetwork.h"
#import "QXShareView.h"
#import "QXAlertView.h"
#import "QXDynamicDetailViewController.h"
#import "QXUserHomePageViewController.h"
#import "QXDynamicLikeListView.h"
#import "QXReportViewController.h"
@interface QXDynamicListCell ()<QXShareViewDelegate>
@property (nonatomic, strong) NSMutableArray *imgViewsArray;
@property (nonatomic, strong)QXSendGiftView *sendView;
@end
@implementation QXDynamicListCell
- (void)awakeFromNib {
[super awakeFromNib];
self.imgViewsArray = [NSMutableArray arrayWithCapacity:6];
self.zanBtn.needEventInterval = 0.5;
[self createUI];
}
-(void)setCellType:(QXDynamicListCellType)cellType{
_cellType = cellType;
}
- (void)setModel:(QXDynamicModel *)model {
_model = model;
[self.avatarImgV setHeadIcon:model.avatar dress:@""];
self.nicknameLab.text = model.nickname;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:model.createtime.longLongValue]; //此处根据项目需求,选择是否除以1000 , 如果时间戳精确到秒则去掉1000
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString*time = [formatter stringFromDate:date];
self.zanBtn.selected = model.is_like.integerValue == 0?NO:YES;
self.timeLab.text = time;
UIImage *sexImage = [UIImage imageNamed:model.sex.intValue==1?@"user_sex_boy":@"user_sex_girl"];
self.sexImageView.image = sexImage;
// self.focusBtn.selected = model.is_follow;
//// self.focusBtn.backgroundColor = model.is_follow ? HEXCOLOR(0x383841) : mainDeepColor;
//
// self.focusBtn.hidden = [BJUserManager.userInfo.uid integerValue] == [model.uid integerValue];
NSString *topic = @"";
for (QXTopicModel *md in model.title) {
if (topic.length == 0) {
topic = [topic stringByAppendingFormat:@"%@",md.title];
}else{
topic = [topic stringByAppendingFormat:@" %@",md.title];
}
}
NSString *content = [NSString stringWithFormat:@"%@ %@",model.content,topic];
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:content];
[attr yy_setColor:QXConfig.themeColor range:[content rangeOfString:topic]];
self.contentLab.attributedText = attr;
// [UILabel changeLineSpaceForLabel:self.contentLab WithSpace:5];
//
// NSString *topic = [model.title stringByReplacingOccurrencesOfString:@"#" withString:@""];
// self.topicLabel.text = topic;
[self.commentBtn setTitle:[NSString qx_showHotCountNum:model.comment_num.longLongValue] forState:UIControlStateNormal];
[self.zanBtn setTitle:[NSString stringWithFormat:@"%@", [NSString qx_showHotCountNum:model.like_num.longLongValue]] forState:UIControlStateNormal];
self.zanBtn.selected = [model.is_like isEqualToString:@"1"]?YES:NO;
[self.giveBtn setTitle:[NSString qx_showHotCountNum:model.rewards_num.longLongValue] forState:(UIControlStateNormal)];
self.imgsBgView.hidden = YES;
self.imgsBgViewHeightCon.constant = 0;
for (UIImageView *imgV in self.imgViewsArray) {
imgV.hidden = YES;
}
CGFloat imgWidth = (SCREEN_WIDTH-16*2-12*2-10*2)/3;
UIImageView *firstImgV = self.imgViewsArray.firstObject;
[firstImgV mas_updateConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(imgWidth, imgWidth));
}];
NSArray *images;
if (model.images.length > 0) {
images = [model.images componentsSeparatedByString:@","];
}
if (images.count > 0) {
for (NSInteger i = 0; i < images.count; i++) {
if (i < self.imgViewsArray.count) {
UIImageView *imgV = self.imgViewsArray[i];
imgV.hidden = NO;
[imgV sd_setImageWithURL:[NSURL URLWithString:images[i]]];
}
}
if (images.count == 1) {//特殊
CGFloat itemW = (SCREEN_WIDTH-15-15-15)/2;
CGFloat imgBgHeight = itemW;
self.imgsBgView.hidden = NO;
self.imgsBgViewHeightCon.constant = imgBgHeight;
[firstImgV mas_updateConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(itemW, imgBgHeight));
}];
}else {
CGFloat itemW = (SCREEN_WIDTH-16*2-12*2-10*2)/3;
CGFloat imgBgHeight = 0;
NSInteger lines = images.count%3 == 0 ? images.count/3 : images.count/3+1;
imgBgHeight = itemW*lines + 10*(lines-1);
self.imgsBgView.hidden = NO;
self.imgsBgViewHeightCon.constant = imgBgHeight;
}
}
if (model.room_id.intValue > 0) {
[self setBtnTypeWithIsFollow:YES];
}else{
[self setBtnTypeWithIsFollow:NO];
}
if (self.cellType == QXDynamicListCellDetail) {
self.bgLeftCon.constant = 0;
self.bgRightCon.constant = 0;
if (model.like_list.count == 0) {
self.userImageView1.hidden = YES;
self.userImageView2.hidden = YES;
self.userImageView3.hidden = YES;
self.likeViewBtn.hidden = YES;
self.likeCountLabel.hidden = YES;
}else if (model.like_list.count == 1) {
self.likeViewBtn.hidden = NO;
self.likeCountLabel.hidden = NO;
self.userImageView1.hidden = NO;
QXDynamicLikeModel *md = model.like_list.firstObject;
[self.userImageView1 sd_setImageWithURL:[NSURL URLWithString:md.avatar] placeholderImage:[UIImage imageNamed:@"user_header_placehoulder"]];
self.userImageView2.hidden = YES;
self.userImageView3.hidden = YES;
self.likeCountLabel.text = [NSString localizedStringWithFormat:QXText(@"等%@人点赞"),self.zanBtn.titleLabel.text];
}else if(model.like_list.count == 2){
self.likeCountLabel.hidden = NO;
self.userImageView1.hidden = NO;
self.userImageView1.hidden = NO;
self.userImageView2.hidden = NO;
QXDynamicLikeModel *md1 = model.like_list.firstObject;
[self.userImageView1 sd_setImageWithURL:[NSURL URLWithString:md1.avatar] placeholderImage:[UIImage imageNamed:@"user_header_placehoulder"]];
QXDynamicLikeModel *md2 = model.like_list[1];
[self.userImageView2 sd_setImageWithURL:[NSURL URLWithString:md2.avatar] placeholderImage:[UIImage imageNamed:@"user_header_placehoulder"]];
self.userImageView3.hidden = YES;
self.likeCountLabel.text = [NSString localizedStringWithFormat:QXText(@"等%@人点赞"),self.zanBtn.titleLabel.text];
}else{
self.likeCountLabel.hidden = NO;
self.userImageView1.hidden = NO;
self.userImageView1.hidden = NO;
self.userImageView2.hidden = NO;
self.userImageView3.hidden = NO;
QXDynamicLikeModel *md1 = model.like_list.firstObject;
[self.userImageView1 sd_setImageWithURL:[NSURL URLWithString:md1.avatar] placeholderImage:[UIImage imageNamed:@"user_header_placehoulder"]];
QXDynamicLikeModel *md2 = model.like_list[1];
[self.userImageView2 sd_setImageWithURL:[NSURL URLWithString:md2.avatar] placeholderImage:[UIImage imageNamed:@"user_header_placehoulder"]];
QXDynamicLikeModel *md3 = model.like_list[2];
[self.userImageView3 sd_setImageWithURL:[NSURL URLWithString:md3.avatar] placeholderImage:[UIImage imageNamed:@"user_header_placehoulder"]];
self.likeCountLabel.text = [NSString localizedStringWithFormat:QXText(@"等%@人点赞"),self.zanBtn.titleLabel.text];
}
self.focusBtn.hidden = NO;
}else if (self.cellType == QXDynamicListCellDynamic) {
self.userImageView1.hidden = YES;
self.userImageView2.hidden = YES;
self.userImageView3.hidden = YES;
self.likeViewBtn.hidden = YES;
self.likeCountLabel.hidden = YES;
self.focusBtn.hidden = NO;
}else{
self.userImageView1.hidden = YES;
self.userImageView2.hidden = YES;
self.userImageView3.hidden = YES;
self.likeViewBtn.hidden = YES;
self.likeCountLabel.hidden = YES;
self.focusBtn.hidden = YES;
}
if ([self.model.user_id isEqualToString:[QXGlobal shareGlobal].loginModel.user_id]) {
self.focusBtn.hidden = YES;
}
}
- (void)createUI {
CGFloat imgWidth = (SCREEN_WIDTH-16*2-12*2-10*2)/3;
for (NSInteger i = 0; i < 9; i++) {
UIImageView *imgV = [[UIImageView alloc] init];
imgV.tag = i+100;
imgV.userInteractionEnabled = YES;
MJWeakSelf
// [imgV dg_Tapped:^{
// [weakSelf onPreviewImage:imgV];
// }];
[imgV addTapBlock:^(id _Nonnull obj) {
[weakSelf previewPhotoWithCurrentIndex:imgV.tag-100];
}];
imgV.hidden = YES;
imgV.layer.masksToBounds = YES;
imgV.layer.cornerRadius = 10;
imgV.contentMode = UIViewContentModeScaleAspectFill;
[self.imgsBgView addSubview:imgV];
[self.imgViewsArray addObject:imgV];
[imgV mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.imgsBgView).offset((imgWidth+10)*(i/3));
make.left.equalTo(self.imgsBgView).offset((imgWidth+10)*(i%3));
make.size.mas_equalTo(CGSizeMake(imgWidth, imgWidth));
}];
}
}
-(void)previewPhotoWithCurrentIndex:(NSInteger)currentIndex{
NSArray *images = [self.model.images componentsSeparatedByString:@","];
YBImageBrowser *browser = [YBImageBrowser new];
NSMutableArray *sourceArray = [NSMutableArray array];
for (int i = 0 ; i <images.count;i++) {
NSString *url = images[i];
YBIBImageData *data = [[YBIBImageData alloc] init];
data.imageURL = [NSURL URLWithString:url];
UIImageView *imageView = [self viewWithTag:100+i];
data.projectiveView = imageView;
[sourceArray addObject:data];
}
browser.dataSourceArray = sourceArray;
browser.currentPage = currentIndex;
[browser show];
}
- (IBAction)onFocus:(id)sender {
if (!QXGlobal.shareGlobal.isLogin) {
[[QXGlobal shareGlobal] logOut];
return;
}
if (self.model.room_id.intValue > 0) {
// 去房间
[[QXGlobal shareGlobal] joinRoomWithRoomId:self.model.room_id isRejoin:NO navagationController:self.navigationController];
}else{
//去聊天
// 去聊天
[[QXGlobal shareGlobal] chatWithUserID:self.model.user_id nickname:self.model.nickname avatar:self.model.avatar navagationController:self.navigationController];
}
}
- (IBAction)commentAction:(id)sender {
if (!QXGlobal.shareGlobal.isLogin) {
[[QXGlobal shareGlobal] logOut];
return;
}
switch (self.cellType) {
case QXDynamicListCellDetail:
break;
case QXDynamicListCellDynamic:{
QXDynamicDetailViewController *vc = [[QXDynamicDetailViewController alloc] init];
vc.model = self.model;
[self.navigationController pushViewController:vc animated:YES];
}
break;
case QXDynamicListCellHomePage:{
QXDynamicDetailViewController *vc = [[QXDynamicDetailViewController alloc] init];
vc.model = self.model;
[self.navigationController pushViewController:vc animated:YES];
}
break;
default:
break;
}
}
- (IBAction)onZan:(UIButton*)sender {
if (!QXGlobal.shareGlobal.isLogin) {
[[QXGlobal shareGlobal] logOut];
return;
}
BOOL isLike = !sender.selected;
MJWeakSelf
[QXDynamicNetwork likeDynamicWithId:self.model.id isLike:isLike successBlock:^(NSDictionary * _Nonnull dict) {
weakSelf.zanBtn.selected = !weakSelf.zanBtn.selected;
if (weakSelf.zanBtn.selected) {
[weakSelf.zanBtn setTitle:[NSString stringWithFormat:@"%ld", weakSelf.model.like_num.integerValue+1] forState:UIControlStateNormal];
}else{
[weakSelf.zanBtn setTitle:[NSString stringWithFormat:@"%ld", weakSelf.model.like_num.integerValue] forState:UIControlStateNormal];
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
}];
}
- (IBAction)onHomepage:(id)sender {
if (!QXGlobal.shareGlobal.isLogin) {
[[QXGlobal shareGlobal] logOut];
return;
}
if (self.cellType == QXDynamicListCellHomePage) {
return;
}
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = self.model.user_id;
[self.navigationController pushViewController:vc animated:YES];
}
- (IBAction)onMore:(id)sender {
if (!QXGlobal.shareGlobal.isLogin) {
[[QXGlobal shareGlobal] logOut];
return;
}
QXShareView *shareView = [[QXShareView alloc] init];
shareView.shareType = QXShareViewTypeFind;
shareView.delegate = self;
shareView.dynamicModel = self.model;
[shareView showInView:KEYWINDOW];
}
- (IBAction)likeViewAction:(id)sender {
if (!QXGlobal.shareGlobal.isLogin) {
[[QXGlobal shareGlobal] logOut];
return;
}
QXDynamicLikeListView *listView = [[QXDynamicLikeListView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
listView.Id = self.model.id;
listView.num = [NSString localizedStringWithFormat:QXText(@"已有%@人点赞"),self.zanBtn.titleLabel.text];
[listView showInView:KEYWINDOW];
}
-(void)didClickShareModel:(QXShareViewModel *)model{
if ([model.name isEqualToString:QXText(@"删除")]) {
MJWeakSelf
QXAlertView *al = [[QXAlertView alloc] initWithFrame:CGRectMake(0, 0, ScaleWidth(300), ScaleWidth(175))];
al.type = QXAlertViewTypeDeleteDynamic;
al.commitBlock = ^{
[weakSelf deleteDynamic];
};
[[QXGlobal shareGlobal] showView:al popType:(PopViewTypeTopToCenter) tapDismiss:NO finishBlock:^{
}];
}else if ([model.name isEqualToString:QXText(@"复制链接")]) {
UIPasteboard *p = [UIPasteboard generalPasteboard];
p.string = [NSString stringWithFormat:@"%@", self.model.share_url];
showToast(@"复制成功");
}else if ([model.name isEqualToString:QXText(@"举报")]) {
QXReportViewController *reportVC = [[QXReportViewController alloc] init];
reportVC.reportType = @"3";
reportVC.fromId = self.model.id;
[self.navigationController pushViewController:reportVC animated:YES];
}
}
-(void)deleteDynamic{
MJWeakSelf
[QXDynamicNetwork deleteDynamicWithId:self.model.id successBlock:^(NSDictionary * _Nonnull dict) {
if (weakSelf.onDeleteBlock) {
weakSelf.onDeleteBlock(weakSelf.model);
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
}];
}
-(void)onReport {
// SPTrendReportVC *vc = [[SPTrendReportVC alloc] init];
// vc.userId = self.model.uid;
// [vc pushSelf];
}
- (IBAction)giveAction:(id)sender {
// QXAlertViewController *al = [[QXAlertViewController alloc] init];
// al.alertView = sendView;
// al.tapDismiss = YES;
// al.popType = PopViewTypeBottomToUpActionSheet;
// self.sendView.vc = self.viewController;
if (!QXGlobal.shareGlobal.isLogin) {
[[QXGlobal shareGlobal] logOut];
return;
}
self.sendView.dynamicId = self.model.id;
MJWeakSelf
self.sendView.sendSuccessBlock = ^(NSString * _Nonnull dynamicId) {
[weakSelf reloadDetail];
[weakSelf.sendView hide];
self->_sendView = nil;
};
self.sendView.vc = weakSelf.viewController;
[self.sendView showInView:KEYWINDOW];
// al.modalPresentationStyle = UIModalPresentationOverFullScreen;
// [self.viewController presentViewController:al animated:NO completion:nil];
}
-(void)reloadDetail{
MJWeakSelf
[QXDynamicNetwork dynamicPageWithId:self.model.id successBlock:^(QXDynamicModel * _Nonnull model) {
weakSelf.model = model;
[weakSelf setModel:model];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
}];
}
-(void)setBtnTypeWithIsFollow:(BOOL)isFollow{
// [self.focusBtn setTitle:isFollow?QXText(@"跟随"):QXText(@"私信") forState:(UIControlStateNormal)];
[self.focusBtn setBackgroundImage:[UIImage imageNamed:isFollow?@"room_user_follow":@"expansion_call"] forState:(UIControlStateNormal)];
// [self.focusBtn setTitleColor:UIColor.whiteColor forState:(UIControlStateNormal)];
// self.focusBtn.backgroundColor = RGB16(0x333333);
// self.focusBtn.titleLabel.font = [UIFont systemFontOfSize:14];
[self.focusBtn addRoundedCornersWithRadius:12.5];
}
-(QXSendGiftView *)sendView{
if (!_sendView) {
_sendView = [[QXSendGiftView alloc] initWithType:(QXSendGiftViewTypeFind)];
// QXAlertViewController *al = [[QXAlertViewController alloc] init];
// al.alertView = sendView;
// al.tapDismiss = YES;
// al.popType = PopViewTypeBottomToUpActionSheet;
[_sendView reloadData];
}
return _sendView;
}
@end