我想通过计算两个NSDate
之间的每一个单元格来更新tableView中每个单元格中的每个标签的文本,如下所示:"〜天〜小时〜分钟〜秒"
在tableview中,它会在cellForRowAtIndex
的代理人tableViewController
处绘制单元格。
所以我尝试在[self.tableview reloadData]
中使用计时器和方法reloadData:cellForRowAtIndex
,但那时我认为它会产生无限循环并死掉。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateLabel:)
userInfo:nil
repeats:YES ];
cell.timeLeftLabel.text=[self updateLabel:self.timer];
}
- (NSString *)updateLabel:(id)sender {
/*At this method , i calculate left days,hours,minutes,seconds between two nsdates
and I make the string by those values : */
NSLog(@"updateLabel : %@",timeLeftString);
return timeLeftString;
}
答案 0 :(得分:4)
你需要每秒重新加载表,而不是标签或单元 - 这意味着 - 创建一个定时器和调用方法[tableView reloadData];
- (void)viewDidLoad {
[super viewDidLoad];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(reloadTableViewData)
userInfo:nil
repeats:YES ];
}
- (void)reloadTableViewData
{
[self.tableView reloadData];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// setup cell
cell.timeLeftLabel.text=[self updateLabel:self.timer];
}
- (NSString *)updateLabel:(id)sender {
/*At this method , i calculate left days,hours,minutes,seconds between two nsdates
and I make the string by those values : */
NSLog(@"updateLabel : %@",timeLeftString);
return timeLeftString;
}
答案 1 :(得分:2)
您无法使用[self.tableview reloadData]
内的cellForRowAtIndex
。
正如你所说,它将创造一个无限循环。
而是在viewDidLoad
中创建一个计时器,如下例所示:
- (void)viewDidLoad
{
[super viewDidLoad];
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(increaseTimerCount) userInfo:nil repeats:YES]
}
- (void)increaseTimerCount
{
[self.tableView reloadData];
}
答案 2 :(得分:1)
创建NSTimer
并将其设置为每秒:
[NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(targetMethod)
userInfo:nil
repeats:YES];
并在targetMethod
使用
[myTableView reloadData];