Ios 是否可以在UITableViewCell中刷新一个视图
我有一个标准的表视图。在每个单元格内,我都有一个标签。在任何给定的时间,我都需要为整个tableView不断更新一个标签(例如,想象时钟滴答作响) 在Ios 是否可以在UITableViewCell中刷新一个视图,ios,objective-c,cocoa-touch,uitableview,Ios,Objective C,Cocoa Touch,Uitableview,我有一个标准的表视图。在每个单元格内,我都有一个标签。在任何给定的时间,我都需要为整个tableView不断更新一个标签(例如,想象时钟滴答作响) 在cellforrowatinexpath中,我识别出需要更新的单元格,并为该单元格内的标签指定弱属性 后来,我打电话 label.text=@“新值” 并期望该特定单元格刷新该特定标签。我检查了弱引用,它是有效的,文本正在更改,但是单元格没有刷新 我不想调用reloadRowsAtIndexPaths,我只需要刷新单元格视图中的一个子视图。可能吗
cellforrowatinexpath
中,我识别出需要更新的单元格,并为该单元格内的标签指定弱属性
后来,我打电话
label.text=@“新值”
并期望该特定单元格刷新该特定标签。我检查了弱引用,它是有效的,文本正在更改,但是单元格没有刷新
我不想调用reloadRowsAtIndexPaths
,我只需要刷新单元格视图中的一个子视图。可能吗
更新:
这是我的密码:
这是view controller.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];
}
}
我认为你可以做到这一点:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
UITableViewCell *cell = [self.tableView cellForItemAtIndexPath:indexPath];
[cell updateLabel:@"New string"];
我真的不明白你为什么要在UIlabel上找到推荐人 您有self.runningTimer,所以在tableView中有一个索引行,所以只需
TimerCell*单元格按cellForItemAtIndexPath排序,只需更新此单元格。更新标签中的文本不需要任何额外更新,无论其在何种视图中(表视图不应影响此操作)。如果标签有外部引用,则无需刷新tableview或任何行。您的代码还有其他问题,也许您可以发布相关的位,我们可以查看一下。更新了代码片段的问题您为什么设置为不使用
重新加载rowsatindexpaths
?因为单元格可以在任何给定时刻滑动到一边。如果我刷新整个单元格,它会滑动复位。我想这基本上就是我所拥有的。最后你会得到一个UILabel的引用,我以前也保存过它。嗯。。。这确实奏效了。我不知道为什么。存储指向标签的指针对常规单元格很有效,但对滑动的单元格不起作用-正如您所看到的,我使用的是MKSlidingTableViewCell
。它在我的单元格上方有一层额外的容器子视图,其中包含内容。但是,获取单元格并将其导航到标签层次结构,并对其进行更新,效果很好。谢谢。请记住,幻灯片中的单元格是重复使用的,您不能在controllerView中仅从您的单元格查看参考。甚至是弱引用。你为我所做的真是太糟糕了。如果要更新单元格,请始终获取整个单元格,而不是其中的对象。