每秒更新UITableView数据

时间:2011-11-22 02:00:30

标签: uitableview

我有一些表格单元显示不同的时间。我希望时间得到更新(就像倒计时一样)。

我试图每秒调用[my_table_name reloadData],但该方法不会调用cellForRowAtIndexPath中的逻辑。如何循环UITableView的单元格来更新其内容?

更新:显示的时间是10 days 11:12:49的形式(每个单元格都有一个到期日期,当表格更新时,到期日期会减去当前时间&计算剩余时间,显示在单元格上)

更新2 :有两种方法可以重新加载数据。一个是从服务器调用,一个是仅调用该函数。

- (void)reloadLocal {
  [my_table_name reloadData];
}

,在线方法是:

- (void)reloadFromServer {
  [self parseXML:@"URL here"];
}
- (void)parseXML:(NSString *)URL {
  // read the XML & update a NSArray containing the data
}

reloadLocal方法就像这样(在viewDidLoad

中调用
current = [[NSDate date] retain];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(reloadLocal) userInfo:nil repeats:YES];

对于cellForRowAtIndexPath方法,这里是伪代码(发布所有行的时间太长):

static NSString *identifier = @"CustomCell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:identifier];

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:identifier owner:nil options:nil];
    for (id currendObj in topLevelObjects) {
        if ([currendObj isKindOfClass:[UITableViewCell class]]) {
            cell = (CustomCell *)currendObj;
            break;
        }
    }
// then insert data to related UIOutlet elements.
NSDate *validUntil = [[NSDate alloc] initWithTimeInterval:diff sinceDate:current];

NSCalendar *sysCalendar = [NSCalendar currentCalendar];
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:current toDate:validUntil options:0];

cell.lbl_day.text = [NSString stringWithFormat:@"%d", [conversionInfo day]];
cell.lbl_minute.text = [NSString stringWithFormat:@"%d", [conversionInfo minute]];
cell.lbl_second.text = [NSString stringWithFormat:@"%d", [conversionInfo second]];
cell.lbl_hour.text = [NSString stringWithFormat:@"%d", [conversionInfo hour]];

请注意,current是当前时间的实例,数据类型为NSDate

1 个答案:

答案 0 :(得分:0)

结束我发现如果更新current中的日期变量reloadLocal,时间显示会自动更新。