问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ios怎么在cell上添加倒计时

发布网友 发布时间:2022-05-01 15:55

我来回答

1个回答

热心网友 时间:2022-06-19 03:01

在一个UITableView中,有多条数据,可能每一个cell对应的剩余时间不一样,所以,如何实现不同的cell中倒计时的实现?之前,考虑到需要单独为每一个cell中开启一个定时器,来监控对应cell的数据更新,但是很快发现这种方法行不通,因为不知道具体有多少条数据,这些数据都是动态从服务器获取的。所以,想到在请求最新的数据时,开启一个定时器,根据该定时器,分别对所有的需要进行倒计时显示的cell进行数据修改。最后,功能已经实现,核心代码如下:

//所有剩余时间数组
NSMutableArray *totalLastTime;
在网络请求到的所有数据中,根据需要将其中要进行倒计时显示的数据中的剩余时间单独保存出来,如果这里是所有的数据都需要倒计时,则只需要保存时间即可,如果是有部分数据才需要倒计时,则可以保存字典,两个键值对分别为其在UITableView的indexPath和剩余时间:num默认从0开始
NSDictionary *dic = @{@"indexPath":[NSStrin stringWithFormat:@"%i",num],@"lastTime": order.payLastTime};
[totalLastTime addObject:dic];
开启定时器方法:
- (void)startTimer
{
timer = [NSTimer scheledTimerWithTimeInterval:1 target:selfselector:@selector(refreshLessTime) userInfo:@"" repeats:YES];

如果不添加下面这条语句,在UITableView拖动的时候,会阻塞定时器的调用
[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];

}

主要的定时器中的方法,在该方法中,遍历totalLastTime,取出其中保存的lasttime和indexpath,time用来显示,在显示完后自减,indexpath代表对应显示的位置,在一次循环后,将新的time和没有改变的indexpath从新替换totalLastTime 中对应位置的元素,以此保证每一秒执行时,显示time都是最新的。
- (void)refreshLessTime
{
NSUInteger time;
for (int i = 0; i < totalLastTime.count; i++) {
time = [[[totalLastTime objectAtIndex:i] objectForKey:@"lastTime"]integerValue];
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:[[[totalLastTime objectAtIndex:i] objectForKey:@"indexPath"] integerValue]];
WLServiceOrderTableViewCell *cell = (WLServiceOrderTableViewCell *)[_tableView cellForRowAtIndexPath:indexPath];
cell.remainingTimeLabel.text = [NSString stringWithFormat:@"剩余支付时间:%@",[self lessSecondToDay:--time]];
NSDictionary *dic = @{@"indexPath": [NSStringstringWithFormat:@"%i",indexPath.section],@"lastTime": [NSStringstringWithFormat:@"%i",time]};
[totalLastTime replaceObjectAtIndex:i withObject:dic];
}
}

- (NSString *)lessSecondToDay:(NSUInteger)seconds
{
NSUInteger day = (NSUInteger)seconds/(24*3600);
NSUInteger hour = (NSUInteger)(seconds%(24*3600))/3600;
NSUInteger min = (NSUInteger)(seconds%(3600))/60;
NSUInteger second = (NSUInteger)(seconds%60);

NSString *time = [NSString stringWithFormat:@"%lu日%lu小时%lu分钟%lu秒",(unsigned long)day,(unsigned long)hour,(unsigned long)min,(unsigned long)second];
return time;

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... VB语言Dim d as DateTimeCellType()什么意思? DataGridView显示时间问题 OracleDataAdapter.Update()写不进数据库也不报错。求帮助啊。。。。 两题谢谢初一英语先发的一定赞 time cell怎么读,怎么解释 time cell是什么化妆品 timeceii中文是什么,我只知道是一种护肤品的品牌 time cell用英语怎么说 为什么我在优酷看电影老是看到一半就没声音了 请问什么是CCC认证? 怎么注册不用手机 不用手机号码可以注册吗? Oracle安装必须图形化界面吗? 卡地亚手镯没有发票专柜能清洗吗? 卡地亚手镯有好多细纹咋办? 卡地亚的手镯很脏了,怎么清洗更干净? 卡地亚手镯平时怎么保养? 想问问卡地亚手镯怎么保养好呢? 怎么用超声波清新设备洗卡地亚手镯? 卡地亚手链、项链怎么养护清洗? 爪虾怎么做好吃 爪虾怎么做好吃,爪虾的吃法 活虾的尾巴和爪子发荧光绿能吃吗?虾体透明,有点淡蓝色 EXCEL用VBA单元格直接求和对比数组求和 ios 怎么样tableview 里面加一个倒计时 未定义与 &#39;cell&#39; 类型的输入参数相对应的函数 &#39;times&#39; excel中日期格式是数字,想转成java的日期格式,遇到了问题 excel用一个单元格显示其对应一行任意一列操作后的修改时间 vba 练习作业 急!!! c# calendar控件中如何自定义每个不同日期的悬浮文本内容 ios开发 什么时候取消cell上的定时器 泰兴广陵红枫园隶属什么公司 成都红枫岭到漫画庄园怎么赶公交 成都市好一点的公墓有哪些呢? 无主之地2哪些boss暴好装备 无主之地2无敌大潜猎掉落什么装备 秋简体毛笔字怎么写 书法字体大全 无主之地2眼镜蛇狙击枪具体哪里掉落,概率高不高? 无主之地2第二周目掉落武器几级 这种毛笔字体叫什么字体