是否可以刷新UITableViewCell中的一个视图

时间:2014-04-10 18:18:12

标签: ios objective-c cocoa-touch uitableview

我有一个标准的表格视图。在每个单元格UITableViewCell内,我有一个标签。在任何给定的时间我都需要不断更新整个tableView的一个标签(例如,想象一个时钟滴答声)。

cellForRowAtIndexPath我认识到需要更新哪个单元格,并将弱属性分配给此单元格内的标签。

然后,我打电话给

  

label.text = @"新值&#34 ;;

并期望该特定单元格刷新该特定标签。我检查了弱引用,它的有效和文本正在改变,但是单元格没有刷新。

我不想打电话给reloadRowsAtIndexPaths,我只需要在小区视图中刷新一个子视图。可能吗?

更新:

这是我的代码:

这是视图控制器.m文件中的属性定义:

@property (nonatomic, weak) UILabel* runningTimerLabel;

我在cellForIndex电话:

中分配了这个属性
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    MKSlidingTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"container"];
    TimerCell *foregroundCell = [tableView dequeueReusableCellWithIdentifier:kTimerCellId];
    UITableViewCell *backgroundCell = [tableView dequeueReusableCellWithIdentifier:@"background"];

    BOOL runningCell = (indexPath.row == self.runningTimer);

    if (runningCell) {
        self.runningTimerLabel = foregroundCell.time;
    }

    cell.foregroundView = foregroundCell;
    cell.drawerView = backgroundCell;
    cell.drawerRevealAmount = 146;
    cell.forwardInvocationsToForegroundView = YES;
    cell.delegate = self;
    cell.tag = indexPath.row;

    return cell; 
}

以下是更新标签的方法:

- (void)refreshRunningTimerCell
{
     self.runningTimerLabel.text = @"New text";
}

从后台线程调用此方法:

- (void)refreshRunningTimer
{
    while (1) {
        sleep(_sleepTime);

        [self performSelectorOnMainThread: @selector(refreshRunningTimerCell)
                               withObject:nil waitUntilDone: YES];

    }
}

2 个答案:

答案 0 :(得分:1)

我认为你可以这样做:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

UITableViewCell *cell = [self.tableView cellForItemAtIndexPath:indexPath];

[cell updateLabel:@"New string"];

答案 1 :(得分:1)

我真的不明白你为什么试图在UIlabel上获得参考。

你有self.runningTimer所以你在tableView中有一个索引行,所以只需要

TimerCell * cell by cellForItemAtIndexPath,只需更新此单元格。