我有一些表格单元显示不同的时间。我希望时间得到更新(就像倒计时一样)。
我试图每秒调用[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
。
答案 0 :(得分:0)
结束我发现如果更新current
中的日期变量reloadLocal
,时间显示会自动更新。