3

假设我进行了子类化UITableViewCell,并且在其中有一些视图(例如UILabel)。

表格已渲染。 现在我想改变/动画那个视图。

|                       |         |                       |
|-----------------------|         |-----------------------|
|      label alpha=1.0  | animate |      label alpha=0.5  | 
|-----------------------|  ===>   |-----------------------|
|      label alpha=1.0  |         |      label alpha=0.5  |
|-----------------------|         |-----------------------|
|                       |         |                       |

所以cellForRowAtIndexPath, willDisplayCell,didEndDisplayingCell现在不是很好的选择,我认为。

animateTest在子类中创建了一个方法,UITableViewCell它改变了标签的样式——例如颜色或执行一些动画。

现在在呈现表格的视图控制器中,我尝试对表格视图子视图执行快速枚举。感谢枚举,我捕获了所有子类UITableViewCell实例并使用performSelector了触发该方法的animateTest方法。但没有任何改变。即使做[tableview reloadData]

如何在表格呈现后为表格单元格中的内容设置动画?(使用[UIView animateWithDuration.........])?

提前致谢。

4

1 回答 1

2

实际上,由于错误的单元初始化,没有发生任何事情。

我之前以以下方式初始化单元格:

NSString *cellIdentifier = [NSString stringWithFormat:@"Cell%d", [indexPath section]];

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
NSArray *topLevelObjects;
topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];

    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[CustomCell class]])
        {
            cell = (CustomCell *)currentObject;
            break;
        }
    }

现在我以这种方式初始化单元格:

static NSString *reuseIdentifier = @"Cell";

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];

if (cell == nil) {
  cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil] objectAtIndex:0];
}

一切正常使用:

CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:3]];
[UIView animateWithDuration:2 animations:^{
    cell.element.alpha = 0;
}];

如果有人能简单地解释第一种方法出了什么问题,我将不胜感激。我怀疑单元格在初始化时以某种方式被重置,所以我的更改不可见,因为旧单元格(应用了动画)被丢弃并且再次生成了单元格。

我前段时间从某个网站复制了该片段,所以我习惯了使用它,但显然这不是一个好的实现。

于 2013-04-18T10:25:13.970 回答