根据计时器调整表格视图单元格文本

时间:2014-05-05 13:00:53

标签: ios uitableview nstimer

我试图根据计时器更新我的手机内容。当视图加载和计时器开始时。计时器是倒数计时器,每个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,它按预期工作。

2 个答案:

答案 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。

来源:UITableView docs

  

当要求提供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];
}

这应该在每次调用计时器方法时更新倒计时标签。