我试图根据计时器更新我的手机内容。当视图加载和计时器开始时。计时器是倒数计时器,每个tableview单元格文本应根据计时器而改变。计时器是倒数计时器。
-(void)updateLabel{
if(counterValue == 0){
[self killTimer];
}
CountdownTableViewMainCell * cell = [self.countdownTableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:0];//i cant get it to work on one cell (the goal is to get it to work on all cells)
cell.countdownLabel.text = [NSString stringWithFormat:@"%d", counterValue];
counterValue--;
}
CountdownTableViewMainCell.h
@interface CountdownTableViewMainCell : UITableViewCell
@property (nonatomic,strong) UILabel * countdownLabel;
@property (nonatomic,strong) UILabel * minsLabel;
@end
CountdownTableViewMainCell.m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.countdownLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 20, 21, 21)];
self.countdownLabel.text = @"14";
self.countdownLabel.font =[UIFont systemFontOfSize:16.0];
self.countdownLabel.adjustsFontSizeToFitWidth = YES;
[self.contentView addSubview:self.countdownLabel];
}
问题是self.countdownLabel
没有更新。我已经记录counterValue
,它按预期工作。
答案 0 :(得分:1)
尝试使用
CountdownTableViewMainCell * cell = [self.countdownTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
cell.countdownLabel.text = ...
[cell setNeedsLayout];
而不是
CountdownTableViewMainCell * cell = [self.countdownTableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:0];
OR
在updateLabel中只需调用[self.countdownTableView reloadData];并在cellForRowAtIndexPath dataSource方法中根据counterValue配置您的单元格。
答案 1 :(得分:1)
在UITableViews中,您更新tableView:cellForRowAtIndexPath
上的单元格内容。 dequeueReusableCellWithIdentifier:
只会从UITableView维护的单元格队列中获取一个新单元格。它不会让你获得当前显示的UITableViewCell。
当要求提供a时,请从数据源对象中调用此方法 表视图的新单元格。
您应该做的是在视图控制器上维护计数器值的属性。
@property NSInteger counterValue;
在计时器调用的方法中更新该属性。然后重新加载tableView:
self.counterValue--
[self.countdownTableView reloadData]
在tableView:cellForRowAtIndexPath:中,您可以执行以下操作:
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Load cell
...
cell.countDownLabel = [NSString stringWithFormat:@"%d", self.counterValue];
}
这应该在每次调用计时器方法时更新倒计时标签。