我得到毫秒,我希望将毫秒转换为日,小时,分钟,秒和显示,并希望在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。但它没有工作,所以建议我另一种选择或告诉我在这段代码中我做错了什么..
答案 0 :(得分:2)
我从您的问题中了解到,您希望每秒重新加载tableView。首先,让我说这是一个坏主意。如果正在重新加载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 :(得分:1)
我已经解决了这个问题。
1.初始我设定的计时器是1秒。
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
2.每秒调用方法并更改值并重新加载tableview。
- (void)updateCounter:(NSTimer *)theTimer {
timerValue += 1;
[ProductListTableView reloadData];
}
3。现在用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));
cell.saleTimeLabel.text = [NSString stringWithFormat:@"%@ Sold %ld:%ld:%ld:%ld",[[productListDataArray objectAtIndex:indexPath.row]objectForKey:@"sales_qty"], days,hours,minuts,seconds];
答案 2 :(得分:-1)
如果timeValue假设系统时间,我不知道timeValue的含义。你可以编写一个计时器来重新加载tableView的数据。