如何在uitableview中使用计时器?

时间:2017-04-20 07:54:17

标签: uitableview nstimer countdown nstimeinterval

我得到毫秒,我希望将毫秒转换为日,小时,分钟,秒和显示,并希望在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。但它没有工作,所以建议我另一种选择或告诉我在这段代码中我做错了什么..

3 个答案:

答案 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的数据。