聊天界面之进度条cell(一)

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)" : "")
                }
            }

        }
    }

  

时间: 2024-08-02 10:58:16

聊天界面之进度条cell(一)的相关文章

聊天界面之气泡文本cell(二)使用Autolayout

聊天界面主要是cell的动态高度计算和效率的问题,参考网上的两篇文章: 1.优化UITableViewCell高度计算的那些事  http://www.cocoachina.com/ios/20150518/11854.html 2.动态计算UITableViewCell高度详解  http://www.cocoachina.com/industry/20140604/8668.html 因为对Autolayout也有一定的了解,决定一试,把动态调整高度交给ios自己处理.最后发现这个方案还是很

Python实现下载界面(带进度条,断点续传,多线程多任务下载等)

开发环境: Windows 7 64位,Python 3.6.2 实现功能: 进度条,下载速度和下载进度的显示,断点续传(暂停继续下载功能),取消下载等功能下载界面,如图所示点击'新建任务',弹出输入下载链接的窗口,如图所示点击'开始下载',可以自动获取下载文件名和选择存储路径,如图所示: 关键代码: 因为断点续传是在之前的文件继续追加,所以open(filename,'ab')这里打开文件的模式要为ab实现断点续传的代码如下: headers={'Range': 'bytes=%d-' %os

【iOS开发-65】QQ聊天界面案例:自定义cell、图片拉伸处理、NSNotification通知、键盘与视图移动以及输入框左边缩进处理

(1)案例 (2)源代码于素材下载 http://pan.baidu.com/s/1bnpiBCz (3)总结 --还是代码封装.控制器.视图.模型分别独立.里面还有很多代码可以独立出来整一个类. --如果某一个值只有特定的几个数字,那么可以用枚举来定义,注意命名规范 typedef enum{ WPMessageTypeMe=0, WPMessageTypeOther=1 }WPMessageType; --依然是计算一段文字所占据的宽和高 CGSize textMaxSize=CGSizeM

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

进度条一般在手机上用到的比较广泛,刚好最近的项目也是一直在做手机站,这个特效是手机端的一个界面,现在我把改成pc端了,进度条的快慢速度和样式可自行调节,改动也是很方便的,不多说,看代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>js控制进度条到达100%跳转界面</title></head>

!!!!!安卓界面总是显示加载进度条的问题,没事别乱用ListFragment

最近的安卓应用快完工了,但是个别界面有瑕疵,怎么修改都解决不了,挥之不去的阴影.问题如下: 在界面上,数据已经加载完毕了,可还是有一股圆形的进度条,感觉它老是在加载什么东西,严重影响界面美观: 1. 布局用的是LinearLayout 2.界面布局用的是RelativeLayout 各种方法都试过了,当然都是基于布局文件的修改,什么fill_parent啦,alignBotton啦,换不同的layout啦,各种属性试了个遍,都不行,为了这个布局问题整整折腾了三天. 反正,在布局文件上再怎么折腾可

WPF好看的进度条实现浅谈(效果有点类似VS2012安装界面)

为了界面友好,一般的操作时间较长时,都需要增加进度条提示.由于WPF自带的进度条其实不怎么好看,而且没啥视觉效果.后来,装VS2012时,发现安装过程中进度条效果不错,于是上网查了资料.学习了ModernUI(开源的),地址:https://github.com/firstfloorsoftware/mui. 后来,做了尝试写了个Demo,效果不错.另外,专门录制了tif文件,方便大家看到效果.废话不多说,先展示效果: 一.效果展示 A.VS2012安装界面图: B.个人尝试Demo效果图:  

Python 实现下载进度条(不带GUI界面)

话不多说,先上图该Python代码可以实现获取下载的文件名,下载文件的大小,下载速度等. 代码关键点: 1.关于下载文件名的获取:代码里使用两种方式获取:(1) 通过Content-Disposition属性,该属性是作为对下载文件的一个标识字段,存储着下载文件名(2) 直接通过链接获取,例如:sw.bos.baidu.com/sw-search-sp/software/8b23f8846df3d/BaiduMusicSetup.exe 文件后面直接就是文件名称了.2.关于下载文件大小的获取:直

C# 通过线程来控制进度条(转)--讲解多线程对界面的操作

// 通过创建委托解决传递参数问题 private void _btnRun_Click( object sender, System.EventArgs e ) { RunTaskDelegate runTask = new RunTaskDelegate( RunTask ); // 委托同步调用方式 runTask( Convert.ToInt16( _txtSecond.Value ) ); } //通过创建委托解决传递参数问题,通过委托的异步调用消除用户界面线程的阻塞问题 privat

WebView 自定义错误界面,WebView 加载进度条,和Logding 效果

---恢复内容开始--- 下载地址,代码就不粘贴了 http://pan.baidu.com/s/1eQncg86 ---恢复内容结束--- 我没有判断是不是网络原因,各位自行判断吧,图片错误信息,及重现加载各种美化的样式请自己写吧,右边的是加载网页的进度条 里面还有一个弹出的dialog 的加载效果, 地址 http://www.cnblogs.com/Mr-Wu/p/4187934.html