我的应用程序正在模仿 Apple VoiceMemos 应用程序。您可以从中选择和播放音频UITableViewCell
。
我有一个UITableViewCell
带有关联 xib 文件的子类。我有一个单例类设置来处理播放音频。播放音频效果很好,但我似乎无法正确更新单元格中的标签。添加了标签和 xib 文件,并且应该更新剩余时间和剩余时间。
我的音频播放器单例类有一个块参数,它将 timeAlreadyPlayed 和 timeRemaining 作为变量传回,如下所示:
(这是在 AudioTableCell 子类中)
[PNAudioController sharedController].playBackBlock = ^(NSString* timeAlreadyPlayed, NSString* timeRemaining, NSTimeInterval currentPlaybackTime) {
NSAssert([NSThread mainThread], @"I need to be on the main thread.");
NSLog(@"timeAlreadyPlayed = %@", timeAlreadyPlayed);
//Labels created in xib and liked to UITableViewCell subclass
self.timeRemainingLabel.text = timeRemaining;
self.timeAlreadyPlayedLabel.text = timeAlreadyPlayed;
self.currentTimeSlider.value = currentPlaybackTime;
[self setNeedsLayout];
};
该NSLog
语句确实正确打印到控制台,但单元格中的标签未正确更新。我确实看到设置 setNeedsLayout 应该将其标记为在下一个更新周期中重绘,但这并没有做任何事情。
我的 tableCell 的外观图像,两个“10:00”标签是我要更新的标签:
由于它正确打印到控制台,我唯一能想到的问题是单元格没有被正确重绘。我什至尝试在UIViewController
包含该UITableView
数据源和委托代码的文件中触发重新加载,但这也不起作用。
编辑:响应 rdelmar:
如果我注销标签并且它是块中的文本:
VideoContentTypeTest[24158:70b] timeRemainingLabel = <UILabel: 0x10c32a170; frame = (263 39; 42 21); text = '-55.61'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x10c329850>>
VideoContentTypeTest[24158:70b] timeRemainingLabel.text = -55.61
标签不是 nil 并且它的文本正在正确更新。它永远不会反映在 UI 中。