短视频APP源码中系统评论功能是如何实现的

简介: 短视频系统中评论功能的分量在短视频功能里可谓是举足轻重,下面简单介绍下,短视频系统中的评论功能的实现方式:评论分为对视频的评论和对评论的回复两部分:对于评论列表大家再熟悉不过了,就是一个tableview罢了,相信刚入门的技术也可以实现。

短视频系统中评论功能的分量在短视频功能里可谓是举足轻重,下面简单介绍下,短视频系统中的评论功能的实现方式:
评论分为对视频的评论和对评论的回复两部分:
对于评论列表大家再熟悉不过了,就是一个tableview罢了,相信刚入门的技术也可以实现。技术的关键在于对评论的回复,我们使用了tableview的嵌套,即:在评论的cell中创建回复的tablview,使用代理功能来实现对数据和UI界面的精准控制,下面是实现的具体方式:

_contentL.attributedText = attstr;
    if ([_model.replys intValue] > 0) {
        CGFloat HHHH = 0.0;
        for (NSDictionary *dic in _replyArray) {
            detailmodel *model = [[detailmodel alloc]initWithDic:dic];
            HHHH += model.rowH;
        }
        if ([_model.replys intValue] == 1) {
            _tableHeight.constant = HHHH;
            _replyTable.tableFooterView = nil;
        }else{
//            if (!_replyBottomView) {
                NSLog(@"===%d",page);
                _model.replayView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];
                _model.replayView.backgroundColor = CellRow_Cor;
                //回复
                UIButton * replyBtn = [UIButton buttonWithType:0];
                replyBtn.backgroundColor = [UIColor clearColor];
                replyBtn.titleLabel.textAlignment = NSTextAlignmentLeft;
                replyBtn.titleLabel.font = [UIFont systemFontOfSize:12];
                [replyBtn addTarget:self action:@selector(makeReply:) forControlEvents:UIControlEventTouchUpInside];
                BOOL showNum = NO;
                if (_model.replyList.count==1) {
                    showNum = YES;
                }
                [self changeMoreShowText:showNum andBtn:replyBtn];
                NSMutableAttributedString *attstr2 = [[NSMutableAttributedString alloc]initWithString:@"收起"];
                [attstr2 addAttribute:NSForegroundColorAttributeName value:RGB_COLOR(@"#969696", 1) range:NSMakeRange(0, 2)];
                NSTextAttachment *attach2 = [[NSTextAttachment alloc] init];
                UIImage *image2 = [UIImage imageNamed:@"relpay_三角上.png"];
                NSAttributedString *imageString2;
                if (image2) {
                    attach2.image = image2;
                    attach2.bounds = CGRectMake(0, -4, 15, 15);
                    imageString2 =   [NSAttributedString attributedStringWithAttachment:attach2];
                    [attstr2 appendAttributedString:imageString2];
                }
                [replyBtn setAttributedTitle:attstr2 forState:UIControlStateSelected];
                [_model.replayView addSubview:replyBtn];
                //记录按钮属性
                _model.replyMoreBtn = replyBtn;
                [replyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
                    make.top.bottom.equalTo(_model.replayView);
                    make.left.equalTo(_model.replayView).offset(26);
                }];       
                if ((_model.replyList.count % 10 != 0
                     && _model.replyList.count % 10 != 1
                     && _model.replyList.count% 10 != 3)
                     || ((_model.replyList.count+1)== [_model.replys intValue])
                    ) {
                    replyBtn.selected = YES;
                }else{
                    replyBtn.selected = NO;
                }
            _replyTable.tableFooterView = _model.replayView;
            _tableHeight.constant = HHHH+20;
        }
    }else{
        _tableHeight.constant = 0;
        _replyTable.tableFooterView = nil;
    }
- (void)makeReply:(UIButton *)replyBtn{
    if (replyBtn.selected) {
        NSDictionary *dic = [_replyArray firstObject];
        [_replyArray removeAllObjects];
        [_replyArray addObject:[dic mutableCopy]];
        _model.replyList = [_replyArray mutableCopy];
//        [_replyTable reloadData];
        replyBtn.selected = NO;
        [self changeMoreShowText:YES andBtn:replyBtn];
        [self.delegate reloadCurCell:_model andIndex:_curIndex andReplist:_replyArray needRefresh:YES];
    }else{     
        if (_replyArray.count == 1) {
            page = 1;
        }else{
            page ++;
        }
        [self requestData:NO andBtn:replyBtn];
    }
}
-(void)changeMoreShowText:(BOOL)isFirstPage andBtn:(UIButton *)replyBtn{
    NSString *tempStr;
    if (isFirstPage) {
        tempStr  = [NSString stringWithFormat:@"展开%d条回复",[_model.replys intValue]>=2?([_model.replys intValue]-1):(1)];
    }else{
        tempStr  = [NSString stringWithFormat:@"展开更多回复"];
    }
    NSMutableAttributedString *attstr = [[NSMutableAttributedString alloc]initWithString:tempStr];
    [attstr addAttribute:NSForegroundColorAttributeName value:RGB_COLOR(@"#969696", 1) range:NSMakeRange(0, tempStr.length)];
    NSTextAttachment *attach = [[NSTextAttachment alloc] init];
    UIImage *image = [UIImage imageNamed:@"relpay_三角下.png"];
    NSAttributedString *imageString;
    if (image) {
        attach.image = image;
        attach.bounds = CGRectMake(0, -4, 15, 15);
        imageString =   [NSAttributedString attributedStringWithAttachment:attach];
        [attstr appendAttributedString:imageString];
    }
    [replyBtn setAttributedTitle:attstr forState:0];
}

看了上述短视频APP源码评论功能的方法介绍,大家是不是眼前一亮?是不是豁然开朗?关于更多短视频系统功能的介绍可以关注我们的账号,我们会持续更新关于短视频功能介绍。

目录
相关文章
|
5天前
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
14天前
|
移动开发 开发框架 小程序
轻松搭建婚恋交友系统源码,H5/小程序/APP自动适配,智能匹配恋爱交友平台快速落地
婚恋交友系统涵盖在线交友、线下活动、专业服务、社交娱乐等,满足用户多样化需求。系统设计简洁易用,提供实名认证、多注册方式及安全保护,确保用户隐私和数据安全。功能丰富,支持图文展示、筛选匹配、聊天互动、虚拟礼物等,提升互动趣味性。平台可分类管理用户、审核信息、智能推荐,优化用户体验。基于TP6+Uni-app框架,实现跨平台同步,支持二次开发,适应不同市场需求。 [了解更多](https://gitee.com/multi-customer-software/jy)
|
13天前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
47 0
|
13天前
|
移动开发 监控 小程序
TP6+Uni-app框架开发,2025年最新圈子系统功能展示,圈子app流量主模式
圈子系统基于TP6+Uni-app框架开发,支持多端账号同步并可快速生成APP。它适用于行业、地方、社交、游戏、兴趣等多种圈子场景,提供广告展示、商品销售、推广结算、交易佣金、入驻费用、会员增值及线上线下活动等多元盈利模式,帮助商户精准定位用户,实现流量变现和业务增长。
|
1月前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
|
11天前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
14 0
|
1月前
|
前端开发 搜索推荐 PHP
大开眼界!uniapp秀操作,陪玩系统新功能,陪玩app源码,可实时互动随心优化!
多客游戏陪玩系统采用前端uniapp与PHP语言,实现全开源、易改造,RTC传输协议确保低延迟语音连麦,分布式部署应对高并发。功能创新包括游戏约单、多人语音聊天室、动态广场、私信聊天等,提供高端社交和个性化服务,满足各类需求,让玩家畅享游戏乐趣。
|
程序员 开发工具 开发者
短视频APP开发者告诉你:苹果手机加上它也能用美颜
如果苹果手机加入了它,微信也能自带美颜,那么,“它”是什么呢?
|
开发者
短视频APP开发者们群雄逐鹿,谁能领先
,那么多短视频APP群雄逐鹿,为何抖音遥遥领先?看完这篇分析,或许你能有所感悟。
|
开发者 数据安全/隐私保护
解决了,短视频APP开发者最头疼的苹果上架相关问题
在短视频APP开发者们把软件开发完毕后,APP就要开始上架了,在APP上架苹果商店时,我们需要一个苹果开发者账号,本文主要为大家讲解苹果开发者账号的申请流程是什么,很多人都不会,特此写下这篇文章,希望能为一筹莫展的朋友提供一些帮助。

热门文章

最新文章

  • 1
    DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
  • 2
    圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
  • 3
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
  • 4
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 5
    电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
  • 6
    京东商品详情数据接口(H5、APP 端)
  • 7
    年轻人如何运用圈子系统进行扩列,社交圈子论坛app扩列的好处,兴趣行业圈子提升社交技能
  • 8
    【Azure App Service】对App Service中CPU指标数据中系统占用部分(System CPU)的解释
  • 9
    【Azure Logic App】使用MySQL 新增行触发器遇见错误 :“Unknown column 'created_at' in 'order clause'”
  • 10
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈