聊天界面之进度条cell

mlj318 mlj318     2022-08-02     591

关键词:

ProgressCell用于显示文件传输的进度,困难点在于根据下载进度更新cell的进度条,先后尝试了几种方法:

1.有新的下载进度时,直接调用reloadData()

2.使用reloadRowsAtIndexPaths(),只更新进度条所在的 cell

这两种方法其实都是重新生成cell,重新设置内容,其实是重新绘制了整个cell.然而根据reloadRowsAtIndexPaths的api说明:

Reloading a row causes the table view to ask its data source for a new cell for that row. The table animates that new cell in as it animates the old row out. Call this method if you want to alert the user that the value of a cell is changing. If, however, notifying the user is not important—that is, you just want to change the value that a cell is displaying—you can get the cell for a particular row and set its new value.

正确的方法是

3.我们需要改变cell显示的内容,数据有更新时,获取cell,更新cell的内容即可。使用update而非reload.如果cell不可见,那也不用更新了。

 

使用update很完美,而使用reload方法,有新的进度更新进度条时会发生闪动的现象。

reload方法与update方法的代码:

    func reloadAtIndex(index:Int) {
        dispatch_async(dispatch_get_main_queue()) {
            let indexPath:NSIndexPath = NSIndexPath(forRow: index, inSection: 0)
            self.tableView.beginUpdates()
            self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
            self.tableView.endUpdates()
        }
    }
    //获取cell直接改变内容不会导致cell闪动,reload会重新生成cell导致闪动
    func updateAtIndex(index:Int,msg:BaseMessage) {
        dispatch_async(dispatch_get_main_queue()) {
            let indexPath:NSIndexPath = NSIndexPath(forRow: index, inSection: 0)
            if let cell = (self.tableView.cellForRowAtIndexPath(indexPath) as? ChatTableViewProgressCellA){
                if msg is ProgressMessage{
                    let message = msg as! ProgressMessage
                    cell.time.text = message.time
                    cell.progress.progress = Float(message.transfered)/Float(message.total)
                    cell.content.text = message.text + (message.speed>=0 ? ":(message.SpeedDescription)" : "")
                }
            }

        }
    }

  

 

 

显示进度条,直到 UITableView 加载所有 Cell

】显示进度条,直到UITableView加载所有Cell【英文标题】:ShowprogressBaruntilUITableViewloadallCell【发布时间】:2021-11-0605:05:32【问题描述】:我正在使用Swift5构建一个应用程序。我用UITableView创建了一个视图。我需要显示进度条,直到... 查看详情

gtk构件之杂项构件

GTK构件之杂项构件(2)1.进度条progressbar 进度条用于显示正在进行的操作的状态。创建进度条函数如下:GtkWidget*gtk_progress_bar_new(void) 创建进度条成功后,即可使用以下函数设置进度条显示比例和获取进度条百分比。/*获取进度条... 查看详情

学习进度条04

...运用JSP语言,将之发布到网页上去,并且可以使用css等让界面更加美观。②编写的程序要可以有错误处理,考虑到用户可能不安要求操作。学会使用单元测试。将各种可能出现的情况考虑完整。 查看详情

如何使用界面更新异步任务中的进度条

】如何使用界面更新异步任务中的进度条【英文标题】:HowtoupdatetheProgressBarinAsyncTaskwithinterface【发布时间】:2017-11-2616:18:16【问题描述】:我创建了一个应用程序,其中我使用了Fragment类和另一个Async类来下载两个不同的类现在... 查看详情

qt软件开发之基础控件--2.5.2qprogressbar进度条(代码片段)

2.5.2QProgressBar进度条 QT的QProgressBar类提供了一个水平和垂直样式的进度条。QProgressBar通常用来给用户显示一个操作的进度。比如:安装软件时显示的进度条、安装系统的进度条等等。    进度条使用步骤:可以设置它的... 查看详情

lol手游之任务进度条精准计算

...作上也在做一個活動,和lol上面这个任务有类似功能——进度条。注意看,上面进度条的位置等间距,但是相邻两个差值却不一样。今天就带大家来实现这种功能,话不多说,赶紧开始吧!前言游戏中,经常会使用进度条的方式... 查看详情

libgdx之progressbar(进度条)slider(滑动条)

ProgressBar即进度条,extendsWidget。展示了在给定范围内时间/加载进度。PreferHeight是由给定的背景图片或者knob的最大高度决定的,默认的宽度width是140.Slider滑动条,一般在游戏中设置调节音量或者调节游戏难度等等。Slid... 查看详情

js控制进度条到达100%跳转界面一

...近的项目也是一直在做手机站,这个特效是手机端的一个界面,现在我把改成pc端了,进度条的快慢速度和样式可自行调节,改动也是很方便的,不多说,看代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><t... 查看详情

pyqt5之进度条:qprogressbar(代码片段)

PyQt5之进度条:QProgressBar在软件中,在处理特别冗长的任务时,如果没有相关的进度信息,这个等待的过程会比较考验用户的耐心,根据相关理论,进度条可以缓解用户在等待过程中的焦虑,所以,... 查看详情

python之小小的进度条(代码片段)

...(20):sys.stdout.write(">")sys.stdout.flush()#实时刷新到屏幕上,进度条实现。如果此行注释,则屏幕延迟一会后‘>‘字符全部显示出来time.sleep( 查看详情

自定义view基础之——图片加载进度条

...后,我们就可以动手开始实践了,先写个简单的图片加载进度条看看。按照惯例,先看效果图,再决定要不要往下看:既然看到这里了,应该是想了解这个图片加载进度条了,我们先看具体用法,再看自定义View的实现:<Relativ... 查看详情

vue聊天功能之滚动条自动定位到底部

一、问题描述首次进入聊天窗口,数据加载之后先显示最早消息,后显示最新消息,也就是数据加载完之后,延迟了一个时间滚动条才自动定位到最底部。二、解决方案 如果数据在刚好加载完的时候滚动条就定位到了最底部... 查看详情

shell脚本之创建彩色进度条(代码片段)

之前的博客中也有写过进度条小程序:[http://blog.csdn.net/superficial_/article/details/69787027]这次的进度条是基于shell脚本编写的,原理基本相似,不过多赘述,其代码如下:#!/bin/bashi=0str=''index=0la 查看详情

unity使用ugui实现王者荣耀ui界面加载页面(进度条)(代码片段)

文章目录【Unity使用UGUI实现王者荣耀UI界面(一)】加载页面(进度条)1.素材准备2.界面分析3.打开UnityHub创建项目4.开始搭建UI1.准备工作2.背景图片3.导入素材4.配置背景图片5.进度条显示UI搭建6.脚本编写7.演示5.... 查看详情

unity使用ugui实现王者荣耀ui界面加载页面(进度条)(代码片段)

文章目录【Unity使用UGUI实现王者荣耀UI界面(一)】加载页面(进度条)1.素材准备2.界面分析3.打开UnityHub创建项目4.开始搭建UI1.准备工作2.背景图片3.导入素材4.配置背景图片5.进度条显示UI搭建6.脚本编写7.演示5.... 查看详情

学习笔记之进度条新闻公告切换长方形点击变宽

进度条:style:{margin:0pxauto;padding:0px;}#t1{width:500px;height:20px;border:1pxsolid#000;}#t2{float:left;height:20px;background-color:#FF0;}body:<divid="t1"><divid="t2"style="width:0px;">< 查看详情

18semantic-ui之进度条(代码片段)

??在使用进度条的时候也是必须要结合项目中ajax和后台数据结合使用的。示例:定义基础进度条<divclass="uiprogress"><divclass="bar"><divclass="progress"></div></div></div>示例:改变进度条颜色... 查看详情

lol手游之任务进度条精准计算(代码片段)

...也在做一個活動,和lol上面这个任务有类似功能——进度条。注意看,上面进度条的位置等间距,但是相邻两个差值却不一样。今天就带大家来实现这种功能,话不多说, 查看详情