我有一个标准的表格视图。在每个单元格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];
}
}
答案 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,只需更新此单元格。