tableviewcell上的定时器:

1.创建一个管理定时器的TimerManger类,

TimerManger.h

#import <Foundation/Foundation.h>

@interface TimerManger : NSObject

/**
结束定时器
*/
- (void)stopTimer; /**
开始定时器
*/
- (void)startTimerWithTimeInterVal:(NSTimeInterval)timeInterVal; /**
单利
*/
+ (instancetype)shareTimer; @end

TimerManger.m

#import "TimerManger.h"

static NSString * TIMER_NOTIFICATION = @"TIMER_NOTIFICATION";

@interface TimerManger ()
/**
定时器
*/
@property (nonatomic, strong) NSTimer *timer; @end @implementation TimerManger + (instancetype)shareTimer
{
static dispatch_once_t onceToken;
static TimerManger *instance;
dispatch_once(&onceToken, ^{
instance = [[TimerManger alloc]init];
});
return instance;
} - (void)startTimerWithTimeInterVal:(NSTimeInterval)timeInterVal
{
if (_timer) return;
_timer = [NSTimer timerWithTimeInterval:timeInterVal
target:self
selector:@selector(timerAction:)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_timer
forMode:NSRunLoopCommonModes];
}
/**
定时器调用事件 @param timer timer
*/
- (void)timerAction:(NSTimer *)timer
{
[[NSNotificationCenter defaultCenter] postNotificationName:TIMER_NOTIFICATION
object:nil
userInfo:nil];
} /**
结束定时器
*/
- (void)stopTimer
{
[self.timer invalidate];
self.timer = nil;
} @end

tableViewcell中的代码

tableviewcell.h

#import <UIKit/UIKit.h>

@interface TimerTableViewCell : UITableViewCell

/**
时间差
*/
@property (nonatomic, copy) NSString * diffTimestr; @end

tableviewcell.m

#import "TimerTableViewCell.h"
#import "TimerManger.h" @interface TimerTableViewCell () @property (nonatomic, assign) double diffTime;
@end @implementation TimerTableViewCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(TimerSelector) name:@"TIMER_NOTIFICATION" object:nil];
}
return self;
} - (void)setDiffTimestr:(NSString *)diffTimestr
{
_diffTime = [diffTimestr doubleValue];
if (_diffTime > ) {
[[TimerManger shareTimer] startTimerWithTimeInterVal:];
}
} - (void)TimerSelector
{
_diffTime = _diffTime -;
self.textLabel.text = [NSString stringWithFormat:@"倒计时:%@",[self gettimestrWithdifftime:_diffTime]];
if (_diffTime <= ) {
self.textLabel.text = @"倒计时:00:00:00";
}
} - (NSString *)gettimestrWithdifftime:(double)difftime
{
//天数
NSString *days = [NSString stringWithFormat:@"%02ld", (NSInteger)((difftime)////)];
//小时数
NSString *hours = [NSString stringWithFormat:@"%02ld", (NSInteger)((difftime)///)%];
//分钟数
NSString *minute = [NSString stringWithFormat:@"%02ld", (NSInteger)((difftime)//)%];
//秒数
NSString *second = [NSString stringWithFormat:@"%02ld", ((NSInteger)(difftime))/%]; return [NSString stringWithFormat:@"%@天%@小时%@分%@",days,hours,minute,second];
}
@end
diffTimestr 是后台计算好的时间差,前端直接使用。

在控制器中直接赋值即可,

如果后台,直接返回的是时间差的话,并且数据可能超过一屏幕

注意,滚动就会出现问题,(每次离开屏幕后,再次进入屏幕的时候,显示的数据就会是开始的数据进行的倒计时),

这时候建议,后台返回到期时间,自己用现在时间计算时间差,

tableViewcell上放定时器的更多相关文章

  1. tableViewCell上的定时器拖动阻塞

    if (_timer == nil) { _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@sele ...

  2. 一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事

    1.一个tomcat上放多个webapp问题,那这多个webapp会不会竞争端口呢?不会!安全两码事

  3. UITableViewCell上放UICollectionView ,UICollectionViewCell无法复用bug

    如题: UITableViewCell上放UICollectionView ,UICollectionViewCell无法复用bug 如果UITableViewCell的size大于整个collect ...

  4. 获取屏幕上的某个控件相对位置,尤其是tableviewcell上的某一个控件的相对位置

    我的需求就是tableviewcell上的按钮,点击就会出现一个弹框: 主要就是获取,所点击的cell上控件的相对位置: CGPoint buttonCenter = CGPointMake(btn. ...

  5. 机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)

    7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的 ...

  6. tableview中在tableheaderView上放一个视图,第一次进入视图显示不正常,往下拉视图仍然不正常,往上拉视图正常

    解决办法: frame来源不正常,从直接在viewDidLoad方法中设置的frame,改为 - (void)viewDidLayoutSubviews { [super viewDidLayoutS ...

  7. iOS tableview上放textfield

    用UITableViewController就可以了,处理键盘弹出和消失的代码已经封装在UITableViewController里了.

  8. VMware要不要装在固态SSD上,虚拟机系统文件要不要放固态SSD上,虚拟机伤不伤固态SSD

    先说结论:VMware建议装在固态上运行快,系统文件最好放在机械硬盘上(有钱除外),虚拟机会伤固态. 今天在学淘淘商城中的搜索项目,克隆了一个虚拟机,这个虚拟机开机贼慢,令人无法忍受,我觉得我再也受不 ...

  9. 深入理解定时器系列第一篇——理解setTimeout和setInterval

    × 目录 [1]setTimeout [2]setInterval [3]运行机制[4]作用[5]应用 前面的话 很长时间以来,定时器一直是javascript动画的核心技术.但是,关于定时器,人们通 ...

随机推荐

  1. openstack RPC通信

    openstack RPC通信 OpenStack 的主要组件有 Nova.Cinder.Neutron.Glance 等,分别负责云平台的计算.存储.网络资源管理.openstack 各组件之间是通 ...

  2. spark sql metastore 配置 mysql

    本文主要介绍如何为 spark sql 的 metastore 配置成 mysql . spark 的版本 2.4.0 版本 hive script 版本为 hive 1.2.2 mysql 为 5. ...

  3. jsp 文件上传操作

    文件上传 1:完成一个文件上传的功能 index.jsp 注意更换form表单的enctype enctype就是encodetype就是编码类型的意思. multipart/form-data是指表 ...

  4. 响应式Web

    响应式布局的核心是:适配不同视口大小的流式布局. RWD和AWD RWD:Responsive Web Design AWD:Adaptive Web Design 实现RWD,多使用流式布局.针对所 ...

  5. 将Python的.py文件转变为可执行文件.exe

    python是个很强大的工具,但我们生成的.py文件在没有Python环境下运行就需要转为.exe文件,我使用的是PyInstaller 1.安装PyInstaller: pip install Py ...

  6. 洛谷P5280 [ZJOI2019]线段树

      https://www.luogu.org/problemnew/show/P5280 省选的时候后一半时间开这题,想了接近两个小时的各种假做法,之后想的做法已经接近正解了,但是有一些细节问题理不 ...

  7. HDU 4143 A Simple Problem 分解因式

    求一个最小的正整数x,使得(y + x) (y - x) = n成立 考虑一下n的分解因式. 可能会想到枚举n的约数,那么a * b = n成立,取最小的x即可 但是要枚举到n / 2,这样会超时. ...

  8. Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API

    用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...

  9. 《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch

    前言 前面 FLink 的文章中我们已经介绍了说 Flink 已经有很多自带的 Connector. 1.<从0到1学习Flink>-- Data Source 介绍 2.<从0到1 ...

  10. 并发编程:synchronized 锁升级过程的验证

        关于synchronized关键字以及偏向锁.轻量级锁.重量级锁的介绍广大网友已经给出了太多文章和例子,这里就不再重复了,也可点击链接来回顾一下.在这里来实战操作一把,验证JVM是怎么一步一步 ...