ios - 在 UITableViewCell 内动画 UILabel 文本更改

标签 ios objective-c uitableview uiview uilabel

我想为 UILabel 制作动画在自定义UITableViewCell当文本属性发生变化时。

我的动画工作正常,除了每次滚动时单元格进入 View 时动画都会触发,并且在调用 [myTableView reloadData] 时也会触发。 .

使用简单的东西

if (![myLabel.text isEqualToString:newText]) {
    // change myLabel.text with animation here. 
}

不工作。

我明白为什么会这样。
如果我每次都创建一个新单元格,我可以检查 myLabel.text有一个字符串,如果有,是否不同,然后应用更改。但是,有时要显示的单元格太多。

重用单元格时,myLabel.text几乎总是已经有一个字符串,并且几乎总是与我想要设置的不同。所以上述检查将不起作用。无论如何,它们都会导致动画触发。

我能想到的唯一方法是使用 myLabel.text 中的最后一个已知值创建一个数组。并进行比较,但这个列表会很大!

我不知道从哪里开始解决这个问题。

我想要的只是myLabel在我的子类 UITableViewCell 中做一个小翻转/backgroundColor 动画当text属性变化。我找到的最接近的解决方案将导致 tableviewcell 中的所有标签运行动画。

我也查不到myLabel.text在给它一个字符串之前,因为它总是被重用。

我开始觉得这是做不到的。

最佳答案

如果您已将 UITableViewCell 子类化,您可以覆盖默认值 prepareForReuse方法。在此方法中,将标签的文本属性设置为 nil .

- (void)prepareForReuse {
    [super prepareForReuse];
    myLabel.text = nil;
}

现在:
if (myLabel.text && ![myLabel.text isEqualToString:newText]) {
    // change myLabel.text with animation here. 
}

现在,只有在将文本从一个文本更改为新文本时,该文本才应该具有动画效果。
prepareForReuse由 tableview 的 dequeueReusableCell 在单元格上调用方法。

关于ios - 在 UITableViewCell 内动画 UILabel 文本更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027373/

相关文章:

ios - 单击时在 BarButtonItem 下方显示下拉菜单(弹出窗口)

ios - NSTextAttachment紧缩

ios - applyImpulse on SKSpriteNode in touchesBegan 不工作

ios - SIGABRT 转换为 UIImage

ios - UISegmentedControl 内部 View 应在显示 View 后调用 API

objective-c - 无法继承 UITableViewCell

ios - 是否建议在 iOS 的另一个后台线程中启动一个后台线程

ios - 试图防止内存泄漏

ios - 将计算属性从类别转换为 Swift 扩展

ios - calayer 没有根据 tableview 单元格中的 UIView 大小而改变