如何在 uitableview 中使用定时器?
how to use timer in uitableview?
我正在获取毫秒,我想将该毫秒转换为天、小时、分钟、秒并显示,并希望在 uiTableview 中显示它。我想每秒更新那个计时器..
我曾使用 uiTableview 委托方法尝试此代码 cellForRowAtIndexPath
。
NSInteger totleTime = [[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"_auction_duration"] integerValue];
totleTime = totleTime - timerValue ;
long days = (totleTime) / (60 * 60 * 24);
long hours = (totleTime - days * 60 * 60 * 24) / (60 * 60);
long minuts = (totleTime - days * 60 * 60 * 24 - hours * 60 * 60) / 60;
long seconds = (totleTime - days * 60 * 60 * 24 - hours * 60 *60 - minuts * 60);
NSLog(@"seconds : %.f minutes : %.f hours : %.f days : %.f ", seconds, minuts, hours, days);
我用过这个方法来调用方法和更新tableview。但它不起作用所以建议我另一个选择或告诉我我在这段代码中做错了什么..
我从你的问题中了解到你想要每秒重新加载你的 tableView。首先,让我说这是个坏主意。如果您的 tableView 正在重新加载,那么用户将看不到任何内容。话虽如此,您可以使用具有特定间隔的计时器来调用方法。该方法可以决定何时重新加载 tableView。
编辑
根据您上一条评论,我了解到您正试图在表格视图单元格中显示倒数计时器。为此,您不需要重新加载表视图。您只需更新数据源并重新加载显示计数器的行。沿着这些路线。
下面的代码片段在 Swift 2
//Call a method named tick() every second
let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(tick), userInfo: nil, repeats: true)
func tick() {
//DO YOUR CALCULATIONS HERE TO CALCULATE YOUR DAYS, MINUTES, etc. THEN CALL THE FOLLOWING METHOD
tblView.reloadRowsAtIndexPaths([NSIndexPath(forRow: {rowNumber}, inSection: {sectionNumber})], withRowAnimation: .None)
//ALSO MAKE SURE YOUR cellForRowAtIndexPath IS CORRECTLY SETTING THE CELL VALUES
}
完成后别忘了invalidate
计时器
我已经解决了这个问题。
1.At 最初我设置的定时器是 1 秒。
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
2.Every 第二次调用方法并更改值并重新加载表视图。
- (void)updateCounter:(NSTimer *)theTimer {
timerValue += 1;
[ProductListTableView reloadData];
}
3。现在计算 uitableView deleget 方法中的剩余时间 cellForRowAtIndexPath
NSInteger totleTime = [[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"_auction_duration"] integerValue];
totleTime = totleTime - timerValue ;
long days = (totleTime) / (60 * 60 * 24);
long hours = (totleTime - (days * 60 * 60 * 24)) / (60 * 60) ;
long minuts = (totleTime - (days * 60 * 60 * 24) - (hours * 60 * 60)) / 60;
long seconds = (totleTime - (days * 60 * 60 * 24) - (hours * 60 * 60) - (minuts * 60));
cell.saleTimeLabel.text = [NSString stringWithFormat:@"%@ Sold %ld:%ld:%ld:%ld",[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"sales_qty"], days,hours,minuts,seconds];
我不知道timeValue的含义,timeValue假设系统时间。你可以写一个计时器来重新加载 tableView 数据。
我正在获取毫秒,我想将该毫秒转换为天、小时、分钟、秒并显示,并希望在 uiTableview 中显示它。我想每秒更新那个计时器..
我曾使用 uiTableview 委托方法尝试此代码 cellForRowAtIndexPath
。
NSInteger totleTime = [[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"_auction_duration"] integerValue];
totleTime = totleTime - timerValue ;
long days = (totleTime) / (60 * 60 * 24);
long hours = (totleTime - days * 60 * 60 * 24) / (60 * 60);
long minuts = (totleTime - days * 60 * 60 * 24 - hours * 60 * 60) / 60;
long seconds = (totleTime - days * 60 * 60 * 24 - hours * 60 *60 - minuts * 60);
NSLog(@"seconds : %.f minutes : %.f hours : %.f days : %.f ", seconds, minuts, hours, days);
我用过这个方法来调用方法和更新tableview。但它不起作用所以建议我另一个选择或告诉我我在这段代码中做错了什么..
我从你的问题中了解到你想要每秒重新加载你的 tableView。首先,让我说这是个坏主意。如果您的 tableView 正在重新加载,那么用户将看不到任何内容。话虽如此,您可以使用具有特定间隔的计时器来调用方法。该方法可以决定何时重新加载 tableView。
编辑
根据您上一条评论,我了解到您正试图在表格视图单元格中显示倒数计时器。为此,您不需要重新加载表视图。您只需更新数据源并重新加载显示计数器的行。沿着这些路线。
下面的代码片段在 Swift 2
//Call a method named tick() every second
let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(tick), userInfo: nil, repeats: true)
func tick() {
//DO YOUR CALCULATIONS HERE TO CALCULATE YOUR DAYS, MINUTES, etc. THEN CALL THE FOLLOWING METHOD
tblView.reloadRowsAtIndexPaths([NSIndexPath(forRow: {rowNumber}, inSection: {sectionNumber})], withRowAnimation: .None)
//ALSO MAKE SURE YOUR cellForRowAtIndexPath IS CORRECTLY SETTING THE CELL VALUES
}
完成后别忘了invalidate
计时器
我已经解决了这个问题。
1.At 最初我设置的定时器是 1 秒。
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
2.Every 第二次调用方法并更改值并重新加载表视图。
- (void)updateCounter:(NSTimer *)theTimer {
timerValue += 1;
[ProductListTableView reloadData];
}
3。现在计算 uitableView deleget 方法中的剩余时间 cellForRowAtIndexPath
NSInteger totleTime = [[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"_auction_duration"] integerValue];
totleTime = totleTime - timerValue ;
long days = (totleTime) / (60 * 60 * 24);
long hours = (totleTime - (days * 60 * 60 * 24)) / (60 * 60) ;
long minuts = (totleTime - (days * 60 * 60 * 24) - (hours * 60 * 60)) / 60;
long seconds = (totleTime - (days * 60 * 60 * 24) - (hours * 60 * 60) - (minuts * 60));
cell.saleTimeLabel.text = [NSString stringWithFormat:@"%@ Sold %ld:%ld:%ld:%ld",[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"sales_qty"], days,hours,minuts,seconds];
我不知道timeValue的含义,timeValue假设系统时间。你可以写一个计时器来重新加载 tableView 数据。