【发布时间】:2015-10-04 11:11:36
【问题描述】:
我的主要目标是创建一个带有少量自定义属性的展开/折叠表格视图。我的逻辑和配置如下:
- 我在 UITableViewCell 上使用 AutoLayout,并在其中添加了一个带有箭头图像的 UIButton。我在这里使用 UIButton 是因为图像是一个模板图像,我需要在不编写任何代码的情况下对其进行着色,并且 UIImageView 不能为图像着色,除非由代码完成。
- 在 tableView 委托的
[tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath]上,我编写了打开(插入行)和/或折叠(删除行)的逻辑。 -
展开和折叠函数调用自定义 UITableViewCell 上的方法,其中包含按钮以使用以下代码为箭头设置动画:
[UIView beginAnimations:@"rotateDisclosure" context:NULL]; [UIView setAnimationDuration:0.3]; self.buttonArrow.transform = CGAffineTransformMakeRotation(M_PI_2); [UIView 提交动画];
我遇到的问题是动画不起作用。
不过我是从[tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath] 调用它的动画作品。
我尝试在动画块内的按钮转换代码之后添加以下内容,但没有成功:
-
[myCell setNeedsDisplay]; [myCell setNeedsLayout];<br>[myCell layoutIfNeeded];
如果您知道我做错了什么或真正发生了什么以及如何使上述工作正常进行,请描述。
谢谢!
【问题讨论】:
-
您正在使用一种非常古老的动画方法。您应该在 UIView 上使用基于块的方法。
-
您能否通过设置断点确保您的单元格中的代码是从 didSelectRowAtIndexPath 调用的?我已经尝试了动画代码并且它可以工作,这似乎不是问题。
-
@Abizern 我认为问题不在于我使用旧方法。我使用了基于块的方法,它给出了相同的结果。
-
@pallzoltan 是的,didSelectRowAtIndexPath 正在被调用。
标签: objective-c uitableview uibutton uiviewanimation autolayout